4.2.34 · D4 · HinglishOperating Systems

ExercisesFile allocation — contiguous, linked, indexed (inode)

3,343 words15 min read↑ Read in English

4.2.34 · D4 · Coding › Operating Systems › File allocation — contiguous, linked, indexed (inode)

Poore document mein, hum teen symbols reuse karte hain. Koi bhi formula use karne se pehle, aao inhe ek baar plain words mein define kar lein:

Jab tak koi problem alag na kahe, bytes, bytes, toh lo.


L1 — Recognition

Exercise 1.1 (L1)

Ek file ki directory entry mein bilkul do numbers store hain: start = 200, length = 8. Yeh kaunsa allocation scheme hai, aur file kaunse physical blocks occupy karta hai?

Recall Solution 1.1

WHAT clue humein kya bata raha hai: sirf do numbers, ek start aur ek count. Yeh contiguous allocation ki fingerprint hai — contiguous ka poora point yahi hai ki arithmetic stored pointers ki jagah le leti hai, isliye metadata bahut chhota hota hai: sirf . WHY: linked mein tum ek first (aur shayad last) block store karte; indexed mein tum ek index block ki taraf point karte. Dono "start + length" tak reduce nahi hote. Blocks occupied: se shuru hoti consecutive run, length : Last block hai (hum 1 isliye subtract karte hain kyunki block 200 khud 8 mein se pehla hai).

Exercise 1.2 (L1)

Ek file ke block chain ke beech mein kahin ek pointer corrupt ho jaata hai. Kis scheme mein yeh potentially poori baaki file ko kho deta hai, aur kyun?

Recall Solution 1.2

Answer: linked allocation (plain, in-block-pointer version). WHY: linked allocation mein har block apne andar next block ka address store karta hai. Block tak pahunchne ka ek hi rasta hai — block ka pointer padhna. Agar woh pointer garbage hai, tum block nahi dhundh sakte — aur na hi block , , … kyunki har ek pichle par depend karta hai. Ek broken link poori tail ko orphan kar deta hai. Contrast: indexed allocation mein har data-block address independently index array mein hota hai, isliye ek corrupted entry sirf woh ek block khoati hai, poori tail nahi. Yeh indexing ka reliability advantage hai.


L2 — Application

Exercise 2.1 (L2)

Ek contiguous file block se shuru hoti hai, block size bytes. Byte 30000 kaunse physical block aur byte-offset mein hai?

Recall Solution 2.1

Step 1 — WHAT: logical block index dhundo. Bytes 0–4095 logical block 0 mein hain, bytes 4096–8191 block 1 mein, etc. Toh WHY floor: hum jaanna chahte hain kitne poore blocks of 4096 byte 30000 se pehle fit hote hain; fractional part current block ke andar ka leftover hai. Step 2 — block ke andar offset: Step 3 — physical block contiguous formula se: Answer: physical block 57 padho, byte offset 1328.

Exercise 2.2 (L2)

Plain linked allocation, , pointer . File ke blocks (order mein) hain . (a) Logical block 3 locate & read karne mein kitne disk reads lagte hain? (b) Har block mein kitne usable data bytes hain?

Recall Solution 2.2

(a) Logical blocks 0 se number hote hain: block 0 = physical 7, block 1 = 3, block 2 = 90, block 3 = 12. Logical block 3 tak pahunchne ka koi formula nahi — chain-walk karni padti hai, har pointer padho next address jaanne ke liye: Yeh disk reads hai. Yeh linked allocation ka cost hai. (b) Next-pointer block ke andar hi rehta hai, bytes steal karta hai:


L3 — Analysis

Exercise 3.1 (L3)

Unix inode, , , toh . In logical block numbers mein se har ek ke liye batao kaunsa pointer region use hold karta hai aur kitne disk reads (inode already memory mein hai) data block fetch karne mein lagte hain: (a) , (b) , (c) .

Recall Solution 3.1

Pehle region boundaries define karo (neeche figure dekho):

  • Direct logical blocks se tak cover karta hai (12 pointers).
  • Single indirect agle blocks cover karta hai: se tak.
  • Double indirect agle blocks cover karta hai: se tak.
Figure — File allocation — contiguous, linked, indexed (inode)

Figure mein kya observe karo: coloured bars woh chaar pointer regions hain jo logical-block number line par rakhe gaye hain, har ek apne start aur end block ke saath labelled hai. Dekho kaise har region theek wahan shuru hota hai jahan pichla khatam hua + 1 — boundaries style round numbers nahi hain balki pehle waalon se offset hain. Teen arrows exercise blocks , , ko unke regions mein daalte hain, aur har arrow ka caption read count = (pointer levels crossed) + 1 batata hai. Figure left-to-right padho aur tum kisi bhi block ko classify kar sakte ho dekh kar woh kaunsi bar mein land karta hai.

(a) : direct. Inode already direct pointers hold karta hai, toh seedha data padhte hain = 1 read. (b) : single indirect. Hum (1) single-indirect block padhte hain address paane ke liye, phir (2) data block padhte hain = 2 reads. (c) : kyunki double indirect. Hum (1) double-indirect block padhte hain, (2) us block ke double-indirect block ko padhte hain, phir (3) data block padhte hain = 3 reads. WHY read count = pointer levels ki sankhya + 1: indirection ka har level ek pointer block hai jo next address jaanne se pehle fetch karna padta hai; last +1 khud data block hai.

Exercise 3.2 (L3)

Same inode parameters. Maximum file size compute karo aur batao kaunsa term dominate karta hai.

Recall Solution 3.2

Har region ki reach = (data blocks ki sankhya) : , plug karo:

  • Direct: B KB
  • Single: B MB
  • Double: B GB
  • Triple: B TB

Total bytes. Dominant term: triple indirect ( TB) — har extra level reach ko se multiply karta hai, isliye top level neeche wale se ~1024× bada hai. Yeh geometric growth isliye hai ki teen levels bahut bade files ke liye bhi kaafi hain.


L4 — Synthesis

Exercise 4.1 (L4)

Design question. Tumhe million chhote log files store karne hain, har ek exactly ek 4 KB block, jo frequently append hoti hain (toh woh kabhi kabhi ek block se grow karti hain). Is workload ke liye teeno schemes rank karo aur justify karo, phir External vs Internal Fragmentation type batao jo har ek suffer karta hai.

Recall Solution 4.1

Workload facts jo matter karte hain: files chhoti hain aur grow karti hain. Contiguous: file grow karne ka matlab hai ki next physical block already taken ho sakta hai → poori file ko bade free run mein relocate karna padega. 10 M files churning ke saath, yeh catastrophic hai. Iske saath external fragmentation bhi suffer karta hai (free space chhote holes mein toot jaata hai jo reuse karne ke liye bahut chhote hain). Yahan sabse bura. Linked: koi bhi free block kisi bhi file mein join ho sakta hai, isliye growth trivial hai (ek block append karo, last pointer patch karo) aur koi external fragmentation nahi hai. Downside: har block bytes next-pointer ko de deta hai — yeh metadata overhead hai (ek fixed tax jo har allocated block ke andar pay hota hai), true internal fragmentation nahi. Random access hai — lekin yeh files 1 block ki hain, isliye practice mein . Achha. Indexed (inode): growth easy hai (index mein ek pointer add karo). 1-block file ke liye address direct pointer mein hota hai → 1-read access, koi external fragmentation nahi. Cost hai inode/index metadata (phir metadata overhead, fragmentation nahi). Overall best real filesystems ke liye kyunki yeh random access bhi rakhta hai agar files baad mein badi ho jaayein. Ranking: Indexed Linked Contiguous. Fragmentation vs overhead map: Contiguous → true external fragmentation (files ke beech unusable gaps). Linked → metadata overhead (har data block ke andar pointer bytes ka tax) plus internal fragmentation sirf file ke last partly-filled block mein. Indexed → metadata overhead (index/inode blocks) plus last-block internal fragmentation. OS woh free blocks kaise dhundhta hai, yeh dekhne ke liye Free Space Management (bitmap, free list) dekho.

Exercise 4.2 (L4)

Ek engineer propose karta hai: "Triple-indirect pointer hata do inode space bachane ke liye — kisi ke paas itni badi files hoti hi nahi." , ke saath, truncated inode ab kitni maximum file size support karta hai, aur yeh original capacity ka kitna fraction hai?

Recall Solution 4.2

Sirf triple term hatao: Original total (Ex 3.2 se) bytes. Fraction retained: Interpretation: har inode mein ek 4-byte pointer hatane se maximum file size ~1000× collapse ho jaati hai, TB se GB tak. Har inode mein 4 bytes bachane ke liye reach ke 3 orders of magnitude khoana ek terrible trade hai — isliye triple pointer exist karta hai chahe rarely use ho.


L5 — Mastery

Exercise 5.1 (L5)

Generalize karo. Ek filesystem bytes, bytes use karta hai, aur ek inode mein direct pointers hain, ek single-, ek double-, aur ek triple-indirect pointer. (a) dhundo. (b) General max-size formula likho. (c) ke liye max size compute karo. (d) Logical block fetch karne mein kitne disk reads lagte hain?

Recall Solution 5.1

(a) WHY pehle : baad ki har count "pointers per block" mein measure hoti hai, isliye pehle fan-out compute karo. (Coincidentally abhi bhi 1024 — block aur pointer dono double ho gaye, toh unka ratio unchanged hai.)

(b) WHY yeh formula: direct pointers bina indirection ke blocks tak pahunchte hain; har indirection level reach ko fan-out se multiply karta hai (single = , double = , triple = ). Har block-count ko bytes/block se multiply karo aur sum karo: factor out karne se arithmetic clean rehti hai — parentheses ke andar pehle integer sum karo, phir ek baar end mein multiply karo.

(c) , ke saath: sum term-by-term banao (WHY: yeh dikhata hai kaunsa level dominate karta hai). Ab ek baar se multiply karo: Triple term () sum ka ~99.99% hai — Ex 3.2 jaisa hi geometric domination.

(d) WHY pehle region classify karo: read count equals (pointer-block levels jo hum dereference karte hain) final data block ke liye, isliye hume sirf jaanna hai block kaunse region mein hai. Boundaries compute karo, har region ko pehle waalon se offset karte hue:

  • Direct: blocks .
  • Single indirect: agle blocks .
  • Double indirect: agle blocks .
  • Triple indirect: agle blocks, se shuru.

Kyunki , block triple-indirect region mein hai. WHY count 4 hai: hume triple-indirect block fetch karna hoga, phir woh jis double-indirect block ki taraf point karta hai, phir woh jis single-indirect block ki taraf point karta hai (3 pointer levels), phir khud data block:

Exercise 5.2 (L5)

Prove karo ki blocks ki fixed disk ke liye (let = poori disk par blocks ki total sankhya), plain linked allocation hamesha kisi bhi size (free blocks) ke allocation request satisfy kar sakta hai, lekin contiguous allocation fail ho sakta hai chahe (free blocks) ho. Contiguous ke liye sabse chhota concrete counterexample do.

Recall Solution 5.2

Linked hamesha succeed karta hai: ek linked file ko kisi bhi position mein free blocks chahiye, kyunki har block ko sirf next ki taraf point karna hai — position irrelevant hai. Toh agar free blocks ki sankhya hai, hum hamesha unme se pick kar sakte hain aur chain kar sakte hain. Formally: free blocks ek set banate hain; koi bhi -subset kaam karta hai. Koi positional constraint nahi ⇒ koi failure nahi. ∎ Contiguous fail ho sakta hai: ise consecutive free blocks chahiye — ek positional constraint jo linked mein nahi hai. Yeh external fragmentation hai. Sabse chhota concrete counterexample. Woh tiniest disk lo jis par failure appear ho sake: blocks pattern free, used, free ke saath — yaani block 0 free, block 1 used, block 2 free.

  • Free blocks , toh size ka request (free blocks) satisfy karta hai.
  • Is request par Linked: blocks 0 aur 2 pick karo, chain . ✔ succeeds (positions matter nahi karte).
  • Is request par Contiguous: 2 adjacent free blocks chahiye, lekin sirf free blocks (0 aur 2) used block 1 se separated hain — length 2 ki koi run exist nahi karti. ✘ fails chahe free blocks hon.

WHY sabse chhota hai: ya ke saath tum "free–used–free" split nahi bana sakte (tumhe kam se kam ek used block beech mein chahiye do free waalon ke, isliye kam se kam 3 blocks). Isliye woh minimal disk hai jo prove karta hai "enough free space" "enough contiguous free space." ∎


Recall One-line self-checks (answer chhupa ke dekho)

Contiguous file (start=200, len=8) ka last block ::: 207 Linked file mein logical block 3 tak pahunchne ke reads ::: 4 4096/4 inode mein logical block 500 ka region ::: single indirect (2 reads) Logical block 100000 ka region ::: double indirect (3 reads) Max file size, 4096/4 inode, bytes mein ::: 4,402,345,721,856 ( 4 TB) Triple-indirect hatane ke baad max (4096/4) ::: 4 GB (original ka lagbhag 0.098%) jab , ::: 1024