4.2.25 · Coding › Operating Systems
Intuition Core idea kya hai
Programs ko lagta hai ki unke paas ek bada, contiguous memory chunk hai jo address 0 se shuru hota hai. Reality yeh hai: physical RAM shared, fragmented, aur finite hoti hai. Paging woh trick hai jo humein allow karti hai ki hum har program ke saath convincingly jhooth bolein .
Hum program ke virtual address space ko fixed-size blocks mein kaatte hain jinhein pages kehte hain.
Hum physical RAM ko bhi usi same size ke fixed-size blocks mein kaatate hain jinhein frames kehte hain.
Koi bhi page kisi bhi frame mein reh sakta hai. Ek lookup table (page table ) record karta hai ki kaunsa page kis frame mein hai.
YEH genius kyun hai: kyunki page size = frame size, koi bhi page kisi bhi free frame mein fit ho jaata hai. External fragmentation bilkul nahi hoti — humein kabhi "itna bada contiguous hole" nahi chahiye. Bas enough free frames chahiye, kahin bhi.
Page ::= virtual (logical) address space ka ek fixed-size block.
Frame (page frame) ::= physical memory (RAM) ka ek fixed-size block.
Crucial invariant: page size frame size==, hamesha power of two hota hai (e.g. 4 KB = 2 12 bytes).
Intuition Power of two kyun hona chahiye?
Agar page size = 2 p bytes hai, toh ek virtual address bit-slicing se cleanly split ho jaata hai — koi division nahi, koi remainder hardware nahi. Low p bits offset hote hain; high bits page number hote hain. Address ko split karna bas "bit string ko kaatna" hai, jo hardware mein free hota hai.
Maano:
Virtual address m bits wide hai → virtual address space = 2 m bytes.
Page size = 2 p bytes.
Sawaal: kitne pages hain, aur hum ek address kaise padhte hain?
Ek page 2 p byte-positions hold karta hai, toh page ke andar ek byte ko name karne ke liye humein exactly p bits chahiye → offset d , jahan 0 ≤ d < 2 p .
Baaki bache m − p high bits kaunsa page hai yeh naam karte hain. Toh:
number of pages = 2 p 2 m = 2 m − p
Translation step. MMU page table mein p num lookup karta hai aur frame number f laata hai. Physical address hai:
phys = f × 2 p + d
d unchanged kyun copy hota hai
Ek page poora ek frame ke andar baithta hai. Ek byte ki block ke andar position tab nahi badlati jab hum block ko relocate karte hain. Toh sirf block number translate hota hai; offset seedha carry through hota hai. Apartment building number translate karo, andar ka apartment number same rakho.
Ek per-process array jo page number se index hota hai, jahan har entry (ek Page Table Entry, PTE ) frame number plus control bits store karti hai.
Definition Typical PTE fields
Frame number — page RAM mein kahan rehta hai.
Valid/Present bit — kya yeh page memory mein hai?
Dirty bit — kya page mein kuch likha gaya hai (writeback chahiye)?
Referenced bit — haal mein use hua? (replacement algorithms ke liye)
Protection bits — read / write / execute permissions.
User/Supervisor bit — access ke liye kitna privilege chahiye.
# entries = 2 m − p , page-table size = 2 m − p × ( PTE size in bytes )
Worked example "Page table BAHUT BADA hai" wali problem
32-bit address (m = 32 ), 4 KB pages (p = 12 ), 4-byte PTEs.
Entries = 2 32 − 12 = 2 20 = 1 048 576 entries.
Size = 2 20 × 4 = 2 22 = 4 MB per process .
Yeh problem kyun hai: 100 processes ke saath yeh akele 400 MB page tables hain — jyadatar un pages ke liye jo process kabhi touch nahi karta. Hume ek smarter structure chahiye.
Intuition Driving problem kya hai
Ek flat (single-level) table har ek possible page ke liye entry reserve karta hai chahe process almost kuch bhi use na kare. Address spaces sparse hote hain (code low, stack high, beech mein bada gap). Hum chahte hain ki khali regions ke liye table space allocate hi na ho .
Page number ko khud chunks mein split karo; har chunk ek level ko index karta hai. Unused regions ke inner tables simply exist hi nahi karte (unka outer entry null hota hai).
Worked example Two-level, 32-bit, 4 KB pages
20-bit page number ko 10 + 10 mein split karo:
outer (directory) [ 10 bits ] inner (table) [ 10 bits ] offset [ 12 bits ]
Outer table: 2 10 = 1024 entries. Har inner table: 1024 entries.
Yeh memory kyun bachata hai: agar ek process 1 inner table ke pages use karta hai, toh tum store karte ho ek outer table + ek inner table = 2 × 1024 × 4 = 8 KB , 4 MB nahi.
Har physical frame ke liye ek entry hoti hai (har virtual page ke liye nahi). Size ∝ RAM, nahi ∝ virtual space. (process-id, page-number) se search hota hai, usually hash ke zariye.
Kyun: total entries = frames ki sankhya, chahe kitne bhi processes hon ya unke spaces kitne bhi bade hon.
Cost: lookup direct index nahi raha → hashing chahiye.
Intuition Har memory access ko PTE padhne ke liye ek
extra memory access chahiye hoga — traffic double ho jaata. Multi-level isse aur bura banata hai (har level ke liye ek access!). TLB (Translation Lookaside Buffer) recent page→frame mappings ka ek chhota fast cache hai jo locality exploit karta hai taaki zyaadatar translations 1-cycle hit hon.
EAT = ( 1 − miss rate ) ⋅ ( t T L B + t m e m ) + miss rate ⋅ ( t T L B + L ⋅ t m e m + t m e m )
jahan L = miss pe walk kiye gaye page-table levels hain.
Worked example Example 1 — virtual address split karo
Page size 4 KB , virtual address A = 0 x 00003 A B C . Page number aur offset nikalo.
4 KB = 2 12 → offset low 12 bits hai. Kyun: 12 bits ek page ke saare 4096 bytes address karte hain.
0x3ABC ke low 12 bits: 0 xABC → offset d = 0 xABC = 2748 . Kyun: 2 12 − 1 se mask karo.
Baaki bits: A ≫ 12 = 0 x 3 = 3 → page number = 3 . Kyun: shift offset ko drop karta hai, page index bachta hai.
Worked example Example 3 — table size & internal fragmentation
Ek process exactly 5000 bytes use karta hai, page size 4 KB .
Pages needed = ⌈ 5000/4096 ⌉ = 2 . Kyun: partial page nahi ho sakta.
Allocated = 2 × 4096 = 8192 bytes. Wasted = 8192 − 5000 = 3192 bytes.
Yeh waste internal fragmentation hai: last page partly empty hai. Kyun paging external fragmentation ko internal fragmentation se trade karta hai.
Common mistake "Bade pages hamesha better hote hain."
Kyun sahi lagta hai: bade pages → kam pages → chhota page table → kam TLB misses. Sab sach hai!
Fix: bade pages matlab zyaada internal fragmentation bhi (avg har region mein 2 1 page waste) aur woh data load karne mein I/O waste jo tum use hi nahi karoge. Yeh ek trade-off hai; 4 KB common sweet spot hai.
Common mistake "Offset bhi translate hota hai."
Kyun sahi lagta hai: poora virtual address lagta hai ki naye physical address pe map hona chahiye.
Fix: sirf page number lookup hota hai; offset verbatim copy hota hai, kyunki ek byte ki position block ke andar tab nahi badlati jab block relocate hota hai.
Common mistake "Page table ka size depend karta hai meri RAM pe."
Kyun sahi lagta hai: tables RAM mein rehte hain, RAM physical hai...
Fix: ek flat page table ka size virtual address space (2 m − p entries) pe depend karta hai, RAM pe nahi. Sirf inverted page table physical RAM ke saath scale karta hai.
Common mistake "Multi-level paging extra tables ki wajah se memory waste karta hai."
Kyun sahi lagta hai: zyaada tables = zyaada overhead, pakka?
Fix: unused regions ke outer entries null hote hain — woh inner tables kabhi allocate hi nahi hote. Sparse address spaces ke liye yeh directory cost se vastly zyaada save karta hai.
Recall Feynman: 12-saal ke bacche ko explain karo
Socho ek badi kitaab jo tumhara program sochta hai ki uski apni hai, page 1, 2, 3... order mein. Lekin library mein sirf random khali shelf slots hain. Toh librarian (OS) tumhara "page 5" shelf 20 pe rakh deta hai, tumhara "page 6" shelf 2 pe — jahan bhi jagah mile. Woh ek chhoti notebook rakhta hai: "page 5 → shelf 20." Jab tum page 5 pe kuch maangto ho, woh notebook check karta hai, shelf 20 pe jaata hai, aur utne hi steps count karta hai us shelf ke andar jitne tum page ke andar chahte the. Page idhar-udhar jaata hai; page ke andar step count kabhi nahi badlata. Woh notebook page table hai, shelves frames hain, aur tumhare imaginary book pages pages hain.
Mnemonic Split aur rule yaad rakho
"POD" — P age number upar, O ffset neeche, page size se D ivide karo.
Aur: "Offset free ride karta hai, sirf frame seat badalta hai." (offset copy hota hai; page→frame translate hota hai.)
Page size aur frame size ke beech kya invariant hai? Woh hamesha equal hote hain (aur power of two hote hain), taaki koi bhi page kisi bhi free frame mein fit ho sake.
Page size 2 p kyun hona chahiye? Taaki address bit-slicing se split ho: low p bits = offset, high bits = page number — koi division hardware nahi chahiye.
Ek m -bit address aur 2 p -byte pages ke liye, kitne pages exist karte hain? 2 m − p .
Virtual address A aur page size 2 p diya ho, page number aur offset kaise nikalte hain? page number = ⌊ A / 2 p ⌋ (high bits, yaani A ≫ p ); offset = A mod 2 p (low p bits, yaani A & ( 2 p − 1 ) ).
Translation mein address ka kaunsa part translate NAHI hota? Offset — yeh unchanged copy hota hai; sirf page number → frame number lookup hota hai.
Frame f , page size 2 p , offset d diya ho, physical address formula kya hai? f × 2 p + d .
32-bit address, 4KB pages, 4-byte PTEs ke liye flat page-table size kya hogi? 2 20 entries × 4 = 4 MB per process.
Multi-level page table kaunsi problem solve karta hai? Sparse address spaces — unused regions ke inner tables kabhi allocate nahi hote (null outer entry), memory bachti hai.
Inverted page table kise index karta hai, aur uska size kaise scale karta hai? Har physical frame ke liye index hota hai; size RAM ke saath scale karta hai, virtual address space ke saath nahi; lookup (PID, page#) pe hashing use karta hai.
Paging kaunsa fragmentation khatam karti hai, aur kaunsa introduce karti hai? External fragmentation khatam karti hai; internal fragmentation introduce karti hai (partly-empty last page, avg ½ page per region).
4 typical PTE control bits batao. Valid/present, dirty, referenced, protection (R/W/X) (aur user/supervisor bhi).
TLB kyun exist karta hai? Recent page→frame translations cache karne ke liye taaki zyaadatar accesses page table ke extra memory reads avoid kar sakein (locality exploit karta hai).
Virtual Memory — paging iska foundation hai; demand paging valid bit use karta hai.
TLB and Address Translation — yahan derive kiye gaye lookup ko speed up karta hai.
Segmentation — alternative/complement; variable size → external fragmentation.
Page Replacement Algorithms — PTE mein referenced/dirty bits use karte hain.
Internal vs External Fragmentation — woh trade-off jo paging karta hai.
Cache Memory and Locality — wahi locality principle jo TLB exploit karta hai.
No external fragmentation