4.2.37 · D5 · HinglishOperating Systems
Question bank — I - O management — polling, interrupt-driven, DMA
4.2.37 · D5· Coding › Operating Systems › I - O management — polling, interrupt-driven, DMA
Sahi hai ya galat — justify karo
Polling hamesha CPU cycles waste karti hai, isliye yeh kabhi sahi choice nahi hoti.
Galat — ek aisi device ke liye jo almost hamesha ready hoti hai aur bahut fast hoti hai, ek single poll turant succeed ho sakta hai, aur yeh fixed interrupt-setup + context-save overhead se behtar hai. Polling tabhi cycles waste karti hai jab device CPU ke relative slow ho.
Interrupt-driven I/O guarantee karta hai ki CPU kabhi wait mein time waste nahi karta.
Waiting ke liye mostly sahi hai, lekin interrupts apna khud ka cost laate hain: har interrupt ek context save/restore force karta hai. High data rates par yeh overhead us polling waste se zyada ho sakta hai jise usne replace kiya tha.
DMA transfer ke dauran CPU ko I/O se poori tarah hata deta hai.
Galat — CPU bytes copy karne se free ho jaata hai, lekin DMA aur CPU memory bus share karte hain. Jab DMA bus leta hai (cycle stealing) toh CPU us cycle ke liye stall ho sakta hai, isliye yeh poori tarah contention-free nahi hai.
Zyada hardware complexity ka matlab hamesha better performance hota hai.
Galat — DMA sabse complex hai phir bhi ek keyboard ke liye overkill hai jo har 200 ms mein ek byte bhejti hai; setup cost single-byte payload se kaafi zyada hai. "Best" ka matlab device ki rate aur block size se match karna hai, hardware maximize karna nahi.
Interrupt-driven I/O mein CPU device ke busy rehne ke dauran useful kaam kar sakta hai.
Sahi — yahi toh poora point hai. Device ka idle time CPU ke doosre kaam ke saath overlap hota hai; CPU sirf briefly rukta hai ISR run karne ke liye jab device signal deta hai ki ready hai.
1 byte ka DMA transfer, 1 byte ke interrupt-driven transfer se faster hota hai.
Galat — ek single byte ke liye, DMA ko phir bhi programming chahiye (address, count, direction) aur ek completion interrupt, jo ek plain ISR se zyada kaam hai. DMA tabhi jeetta hai jab block bada hota jaata hai.
Polling ko koi interrupt vector ya ISR nahi chahiye.
Sahi — polling software mein pure busy-wait hai; koi hardware interrupt line nahi, koi vector lookup nahi, koi ISR nahi. Yahi simplicity exactly wajah hai ki ise zero extra hardware chahiye.
Status, data, aur command registers ko special I/O ports par rehna chahiye, memory addresses par nahi.
Galat — unhe dono tarafon se access kiya ja sakta hai. Memory-mapped I/O vs Port-mapped I/O dekho: memory-mapped unhe ordinary addresses ki tarah expose karta hai; port-mapped special I/O instructions use karta hai. Teeno techniques dono ke saath kaam karti hain.
Error dhundho
"DMA ke saath, N-byte block ke liye N interrupts fire hote hain, ek per byte."
Galat — DMA exactly ek interrupt raise karta hai, completion par (count 0 tak pahunchne par). N ka per-byte interrupt count interrupt-driven I/O ka hai, DMA ka nahi.
"Polling O(1) CPU work hai kyunki yeh sirf ek loop hai."
Galat — loop spin karta hai, wait karte hue iterations execute karta hai, phir N byte-moves karta hai. Yeh O(N) moves hai plus ek bada wasted-poll term, O(1) nahi.
"Interrupts hamesha polling se better hote hain kyunki CPU kabhi spin nahi karta."
Galat — ek high-rate device ke liye (millions of bytes/sec) har byte par ek interrupt matlab millions of ISR invocations; accumulated overhead polling waste se zyada ho sakta hai, interrupts ko worse bana deta hai. Yahi gap DMA fill karta hai.
"ISR status register ko ek busy-wait loop mein read karta hai jab tak device ready nahi ho jaati."
Galat — ISR isliye run hota hai kyunki device already ready hai (usne interrupt raise kiya). Status par busy-waiting polling technique hai; ise ISR ke andar rakhna interrupts ka purpose khatam kar deta hai.
"DMA ko bilkul bhi interrupt nahi chahiye — isliye yeh efficient hai."
Galat — DMA ko phir bhi ek completion interrupt chahiye taaki CPU ko pata chale ki block khatam hua. Uski efficiency N ki jagah ek interrupt raise karne se aati hai, zero raise karne se nahi.
"Cycle stealing ka matlab DMA CPU registers chura leta hai."
Galat — yeh memory-bus cycles churaata hai, registers nahi. Jab DMA ko ek word move karne ke liye bus chahiye, woh briefly bus le leta hai aur CPU us cycle ke liye stall ho sakta hai; registers untouched rehte hain.
"Kyunki interrupt-driven I/O kaam overlap karta hai, isliye total transfer polling se faster khatam hoti hai."
Zaroori nahi — device ko phir bhi lagega ready hone mein, kisi bhi tarah se. Interrupts device ko speed nahi dete; yeh CPU ko usi wait ke dauran doosra kaam karne ke liye free karte hain. Transfer completion time device se bound hoti hai, CPU technique se nahi.
Why questions
Kyun polling I/O ke dauran useful CPU utilization ko zero ke paas le jaati hai?
Kyunki CPU back-to-back poll loop run karta hai aur har last se pehle ka iteration device ko not-ready paata hai, isliye almost saare iterations pure waste hain. CPU utilization and throughput dekho.
Kyun fast devices ke liye "per data unit" ek interrupt failure mode hai?
Har interrupt ek fixed cost force karta hai — context save, vector jump, ISR run, aur context restore. Ise millions of units per second se multiply karo aur dominate karne lagta hai, real kaam bhukha reh jaata hai.
Kyun CPU ko har transfer se pehle DMA controller program karna padta hai?
Controller generic hardware hai; ise is transfer ke liye source/destination address, byte count, aur direction chahiye. Us setup ke bina use pata nahi hoga kya move karna hai ya kahan.
Kyun CPU ko ISR enter karne se pehle "context save" karna hota hai?
ISR usi CPU par run hota hai aur registers/flags ko clobber karta hai. Interrupted program ki state save karna (dekho Context switching) CPU ko exactly wahan restore aur resume karne deta hai jahan ISR return hone ke baad chhoda tha.
Kyun DMA ko O(1) CPU involvement kaha jaata hai jabki interrupt-driven O(N) hai?
DMA poore block ko autonomous hardware ko de deta hai, isliye CPU work (setup + ek completion ISR) N se regardless constant rehta hai. Interrupt-driven har unit par ek ISR pay karta hai, isliye CPU work N ke saath linearly badhta hai.
Kyun ek device driver alag devices ke liye alag techniques choose karta hai?
Sahi technique device ki data rate aur block size par depend karti hai — fast-always-ready ke liye polling; slow rare events ke liye interrupts; bade fast blocks ke liye DMA. Driver apne specific hardware ke liye woh decision encode karta hai.
Kyun DMA disk transfers ke liye especially valuable hai lekin keyboard ke liye wasteful hai?
Ek disk bade contiguous blocks (thousands of bytes) move karta hai jahan fixed setup cost kaafi bytes mein amortise ho jaati hai; ek keyboard har rare keystroke par ek single byte deliver karta hai, isliye DMA ka setup payload se zyada hota hai — interrupt-driven better fit karta hai. Disk Scheduling dekho.
Edge cases
Agar ek device turant ready ho jaaye (pehla poll complete hone se pehle), toh kaun sa method fastest hai?
Polling — pehla status read already "ready" dikhata hai, isliye zero wasted spinning hai aur koi interrupt/DMA setup overhead nahi. Yeh classic "device almost always ready" case hai.
Interrupt-driven I/O mein kya hota hai agar doosra interrupt aaye jabki ISR abhi bhi run ho rahi hai?
Yeh ya toh pending held hoti hai (masked) ya, agar higher priority ho, pre-empt kar sakti hai — interrupt controller ke priority/masking rules se handle hota hai. Baat yeh hai ki interrupts nest ya queue ho sakti hain; ISR ko re-triggering se bachne ke liye return se pehle apna source clear karna hoga. Interrupts and ISR dekho.
1-byte transfer ke liye, teeno methods ko CPU work ke hisaab se rank karo.
Roughly interrupt-driven ≈ polling (agar device quick ho) < DMA — ek akele byte ke liye DMA ka setup + completion interrupt sabse zyada kaam hai, usual large-block ranking ko ulta kar deta hai.
Agar (device CPU jitni fast hai), toh kya interrupt-driven phir bhi polling se better hai?
Nahi — jaise chhota hota hai, polling waste , isliye bachane ke liye kuch nahi, jabki interrupts abhi bhi cost karte hain. Is limit mein polling jeetti hai.
Ek slow device ke pure busy-wait poll ke dauran CPU utilization kya hai?
Effectively 0% useful work — CPU "busy" hai lekin sirf status register par spin kar raha hai, kuch productive nahi kar raha jabki device ready nahi hai.
Ek DMA block transfer ke dauran heavy bus contention ke saath, kya CPU throughput drop ho sakta hai bhaale woh bytes copy nahi kar raha?
Haan — frequent cycle stealing kaafi bus cycles chura leta hai, CPU ke apne memory accesses ko stall karta hai, isliye effective throughput dip ho sakti hai. Yeh copying se kaafi behtar hai, lekin free nahi hai.
Agar ek device interrupt raise kare lekin CPU ke interrupts disabled hain (masked), toh kya hota hai?
Request tab tak pending rehti hai jab tak interrupts re-enable nahi ho jaate; phir CPU use service karta hai. Masking delay karta hai, request discard nahi karta — device line asserted hold karta hai.
Recall Traps ka one-line summary
Technique ko device ki rate aur block size se match karo: fast-always-ready → polling; slow rare single bytes → interrupts; large fast blocks → DMA. Upar har trap ya toh us matching ka koi violation hai, ya yeh bhool jaana hai ki DMA abhi bhi bus share karta hai aur abhi bhi ek interrupt chahiye.