Foundations — Memory protection units (MPU) — preventing stack overflow, access faults
5.5.24 · D1· Coding › Embedded Systems & Real-Time Software › Memory protection units (MPU) — preventing stack overflow, a
Parent note padhne se pehle, tumhe kuch ideas achhi tarah samajhne honge: memory kya hoti hai, ek address usmein kaise point karta hai, stack kya hai aur woh kis direction mein grow karta hai, "read / write / execute" ka matlab kya hai, aur fault kya hota hai. Yeh page har ek cheez ko scratch se build karta hai, us order mein jismein woh ek doosre par depend karte hain.
1. Memory ek lambi numbered street ki tarah
Ek aisi street ka picture karo jahan har ghar ka ek house number ho. Memory mein "house number" ko address kehte hain.

Yeh topic isko kyun zaroori hai: MPU ka poora kaam hai ki har access ke address ko dekhe aur decide kare ki woh allowed hai ya nahi. Address nahi → MPU nahi.
Recall Normal (decimal) numbers mein kyun nahi count karte?
Question: Addresses hexadecimal kyun use karte hain jaise 0x2000_0000? ::: Kyunki memory boundaries powers of two par padti hain, aur har hex digit exactly 4 bits hoti hai — toh par alignment ko low hex digits dekh kar samajhna aasaan hota hai.
2. Hexadecimal aur "low bits" ka matlab
Har address asal mein bits (0s aur 1s) ki ek string hai. Hex sirf shorthand hai: ek hex digit = 4 bits.

Yeh topic isko kyun zaroori hai: MPU yeh decode karta hai ki ek address kis region mein hai low bits ko mask off karke. Agar tumhara region base aligned nahi hai, toh hardware silently low bits ignore kar deta hai aur tumhara protection wahan land karta hai jahan tum chahte nahi the (Parent mein Mistake 1).
3. Read / Write / Execute — ek byte ke saath teen kaam
MPU in mein se har ek ko independently allow ya forbid kar sakta hai. Parent ke AP bits (access permission) aur XN bit (eXecute-Never) bilkul yahi hain: XN = "in bytes ko kabhi instructions ki tarah treat mat karo."
Recall "Execute" ko "read" se alag kyun rakhte hain?
Question: MPU execute ko read se alag permission kyun treat karta hai? ::: Taaki data regions (stack, heap) ko Execute-Never mark kiya ja sake — agar ek attacker kisi buffer mein shellcode likhta hai, toh CPU us waqt fault karta hai jab woh us data ko run karne ki koshish karta hai. Yeh code-injection attacks ko khatam karta hai.
4. Stack: ek pile jo neeche grow karti hai
Beginners ke liye surprising baat: ARM par (aur zyaatar CPUs par) stack lower addresses ki taraf grow karta hai. Stack pointer () ek register hai jo pile ke current top ka address hold karta hai; pushing se subtract karta hai.

Yeh topic isko kyun zaroori hai: MPU ka headline trick yeh hai ki har stack ke bottom (lowest address) par ek tiny no-access guard band rakha jaata hai. Kyunki stack neeche grow karta hai, overflow pehle guard se takraata hai, aur guard wahi jagah hai jahan MPU fire karta hai. Stack frame par kya rehta hai uski poori picture ke liye Stack memory layout dekho.
Recall ARM Cortex-M par stack kis direction mein grow karta hai?
Question: Stack par data push karo — kya stack pointer address mein upar jaata hai ya neeche? ::: Neeche (subtract karta hai). Toh guards stack ke bottom / lowest address par lagate hain.
5. Privileged vs unprivileged — CPU ke do "modes" hote hain
Isliye parent "RW in privileged+user" vs "RW privileged only" ki baat karta hai. Ek user task jo ek privileged-only peripheral region par *UART_TXREG = data; call karta hai, usse fault milta hai. Zyada detail ARM Cortex-M privilege levels mein hai.
Yeh topic isko kyun zaroori hai: har MPU region do jawab carry karta hai — privileged code kya kar sakti hai, aur unprivileged code kya kar sakti hai. Peripherals ka isolation (Memory-mapped IO) poori tarah is split par depend karta hai.
6. Fault (exception): alarm bell
Ek smoke alarm ke baare mein socho jo stove band kar de. MPU sensor hai; fault alarm hai; handler tumhara decision hai ("task kill karo / log karo / reboot karo"). Kyunki yeh bad write complete hone se pehle fire karta hai, koi corruption nahi hoti. Yeh poori machinery Memory faults and exception handling hai.
Yeh topic isko kyun zaroori hai: guard band useless hai jab tak us par hit hone par kuch hota nahi. Fault → handler → MMFAR chain wahi "kuch" hai.
7. Region: ek fenced yard, plus overlap priority
Half-open bracket ka matlab hai: left endpoint (BASE) include karo, right wala (BASE + SIZE) exclude karo. Toh sabse last byte address par hai.
Yeh sab topic ko kaise feed karte hain
Har arrow kehta hai "tail samajhne ke baad hi head samjho." Alignment () aur permissions () dono region setup () mein flow karte hain; overflow () aur regions () milkar fault () produce karte hain jis par guard band () rely karta hai.
Equipment checklist
Khud ko test karo — sirf jawab dene ke baad reveal karo.
- Ek byte mein … se … tak ka number hota hai ::: 0 se 255 tak (8 bits).
- Ek address hai … ::: woh number jo memory mein ek byte-box ko name deta hai.
- "Low 10 bits zero" ka matlab hai address … ka multiple hai ::: (1 KB ke saath aligned).
- ke saath alignment ka bitmask test hai … ::: .
- Tin access types jo MPU control karta hai woh hain … ::: Read, Write, Execute.
- XN ka full form … hai aur iska matlab … ::: eXecute-Never; in bytes ko kabhi instructions ki tarah run nahi kiya ja sakta.
- ARM Cortex-M par stack … addresses ki taraf grow karta hai ::: lower (stack pointer subtract karta hai).
- Guard band isliye stack ke … par hota hai ::: bottom / lowest address.
- Do CPU privilege levels hain … ::: privileged (kernel) aur unprivileged (user tasks).
- Jab do regions overlap karein, toh … numbered wala jeet jaata hai ::: highest.
- Ek MPU violation ek … fault raise karta hai, jise … mein handle kiya jaata hai ::: MemManage fault;
MemManage_Handler(). - Illegal address hold karne wala register … kehlaata hai ::: MMFAR.
Jab tum bina dekhhe barahon jawab de sako, tab tum parent note aur usmein region-configuration walkthrough ke liye ready ho — plus Buffer overflow attacks aur Real-time system determinism "why it matters" context ke liye.