AjitGurav
HomeAbout UsContact
JavaScriptMemory Architecture
Memory Architecture

Memory Basics

  • Introduction
  • Basics of Computer Memory
AjitGurav

Learn programming and system architecture in simple language through Marathi, Hindi and English.

ajitdada.gurav@gmail.com

Quick Links

  • About Us
  • Contact
  • Portfolio

Legal

  • Privacy Policy

© 2026 AjitGurav. All rights reserved.

Made with in Maharashtra, India.

Memory Architecture

The Absolute Basics of Computer Memory

मेमरीचा पाया (The Absolute Basics of Computer Memory)

जेव्हा आपण एखादा प्रोग्रॅम लिहितो, तेव्हा तो हवेत चालत नाही, बरोबर? त्याला काम करण्यासाठी एका भौतिक (Physical) जागेची गरज असते. ही जागा म्हणजेच तुमची RAM (Random Access Memory). कोणत्याही Software Architecture चा पाया अगदी इथूनच सुरू होतो.

चला तर मग, मेमरीच्या आत प्रत्यक्षात काय घडते, ते आपण एकदम सोप्या भाषेत उघडून पाहूया.


१. RAM

मेमरी (RAM) प्रत्यक्षात काय असते?

तुम्हाला कधी प्रश्न पडला आहे का की, हार्डवेअरच्या नजरेतून RAM म्हणजे नक्की काय असते?

Software च्या दुनियेतून बाहेर येऊन पहिले तर, RAM म्हणजे दुसरे-तिसरे काही नसून लक्षावधी सूक्ष्म स्विचेसचा (Transistors आणि Capacitors) एक विशाल संच आहे. हे समजण्यासाठी आपण आपल्या घरातील साध्या लाईटच्या बटनाचे उदाहरण घेऊया.

या प्रत्येक स्विचची फक्त दोनच रूपे (States) असू शकतात:

  • विद्युत प्रवाह चालू (ON) = लाईट चालू. याला आपण गणिताच्या भाषेत 1 म्हणतो.
  • विद्युत प्रवाह बंद (OFF) = लाईट बंद. याला आपण गणिताच्या भाषेत 0 म्हणतो.
Visual : single-switch
Single Switch (Transistor)
[Button ON] ---> (💡 Light Bulb ON) === 1 [1]
[Button OFF] ---> (⚫ Light Bulb OFF) === 0 [0]

👉 या आकृतीत काय दाखवले आहे?

  • या diagram मध्ये आपल्या घरातील एका साध्या switch चे उदाहरण दिले आहे.
  • जर switch ON असेल, तर लाईट चालू होतो आणि त्याची value 1 मानली जाते.
  • जर switch OFF असेल, तर लाईट बंद राहतो आणि त्याची value 0 मानली जाते.

कॉम्प्युटरला इंग्रजी, मराठी किंवा JavaScript समजत नाही. त्याला फक्त "करंट चालू आहे" किंवा "करंट चालू नाही" एवढेच समजते. या एका सिंगल स्विचला आपण Bit (Binary Digit) म्हणतो. Bit हे माहिती साठवण्याचे सर्वात लहानात लहान एकक (Unit) आहे.

आता या एका बटनाला थोडे 'Zoom Out' करून पाहूया. तुमची RAM म्हणजे असे लागून-लागून असलेले कोट्यवधी स्विचेस असतात:

Visual : ram-switches
Row of Switches in RAM (Millions of Switches)
[०] [१] [०] [०] [१] [१] [१] [०] [०] [०] [१] [१] [०] [१] [०] [०] [१] [०] [०]... (Millions)

या आकृतीत काय दाखवले आहे?

  • या diagram मध्ये RAM मधील सूक्ष्म स्विचेसची एक सलग रांग (Row) दाखवली आहे.
  • यातील प्रत्येक [0] किंवा [1] हा एक स्वतंत्र Bit दर्शवतो.
  • Physical Memory मध्ये असे अब्जावधी Bits एकापाठोपाठ एक जोडलेले असतात.

२. The Concept of Byte

डेटा साठवताना एक-एक सिंगल Bit का नाही वापरला जात? (The Concept of Byte)

आता तुम्हाला नक्कीच प्रश्न पडला असेल की, जर RAM मध्ये लक्षावधी Bits आहेत आणि १ Bit Data store करू शकतो, तर आपण एक-एक Bit स्वतंत्रपणे का वापरत नाही?

याचे साधे उत्तर आहे: जरी RAM मध्ये लक्षावधी सूक्ष्म स्विचेस असले, तरी Data store करण्यासाठी किंवा read करण्यासाठी त्यांना एक-एक (Single) वापरले जात नाही. त्यांना नेहमी ८-८ चे गट करून वापरले जाते.

Visual : byte-groups
RAM मधील स्विचेसची गट (In a row of Switches)
[०] [१] [०] [०] [१] [१] [१] [०] [०] [०] [१] [१] [०] [१] [०] [०] [१] [०] [०]... (अब्जावधी)
\____________________________/ \____________________________/
Group 1 (1 Byte) Group 2 (1 Byte)

या आकृतीत काय दाखवले आहे?

  • या diagram मध्ये सलग असलेल्या Bits चे ८-८ चे गट कसे बनवले जातात हे दाखवले आहे.
  • पहिल्या ८ Bits च्या गटाला 'Group 1' म्हणजेच 1 Byte म्हटले आहे.
  • त्यापुढील ८ Bits च्या गटाला 'Group 2' म्हणजेच दुसरा 1 Byte म्हटले आहे.

या संकल्पनेचे मुख्य मुद्दे:

  • Byte म्हणजे काय — एक Byte (८ Bits) हा Memory मधील Data store आणि read करण्याचा सर्वात लहान युनिट (Unit) आहे.
  • Addressable Unit — संगणकाच्या RAM मध्ये डेटा साठवण्याचे सर्वात लहान ॲड्रेस करण्यायोग्य एकक 'Byte' असते. मेमरीचा पत्ता एका Bit ला नसून ८ Bits च्या गटाला मिळतो.
  • सलग रचना — तांत्रिकदृष्ट्या, मेमरी ही लागून-लागून (Continuously) Allocate केलेल्या अब्जावधी Bytes ने बनलेली एक सलग जागा आहे.
  • सलग रचना — तांत्रिकदृष्ट्या, मेमरी ही लागून-लागून (Continuously) Allocate केलेल्या अब्जावधी Bytes ने बनलेली एक सलग जागा आहे.

पण ८ चाच गट का बनवला जातो?

याचे मुख्य कारण आहे 'Addressing' (पत्ता शोधण्याची गुंतागुंत). कल्पना करा की, एका मोठ्या शहरात प्रत्येक माणसाला स्वतंत्र घराचा पत्ता दिला, तर Postman ला पत्रे वाटताना किती त्रास होईल? त्याऐवजी एका इमारतीत (Building) ८ फ्लॅट्सचा गट बनवून त्या इमारतीला एकच पत्ता दिला, तर काम खूप वेगाने होते. CPU चे काम अगदी Postman सारखे असते. जर त्याने RAM मधील प्रत्येक सिंगल Bit ला (स्विचला) वेगळा पत्ता दिला, तर कोट्यवधी पत्ते तयार होतील आणि CPU चा वेग प्रचंड मंदावेल. यावर उपाय म्हणून इंजिनिअर्सनी ८ Bits चा एक गट तयार केला आणि या गटाला नाव दिले Byte.

Visual : byte-structure
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
╭───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────╮
│ 0 │ 1 │ 0 │ 0 │ 0 │ 0 │ 0 │ 1 │
╰───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────╯
\___________________________________________________________/
|
1 Byte (Group of 8 Switches)

** या आकृतीत काय दाखवले आहे?**

  • या diagram मध्ये 1 Byte ची अंतर्गत रचना (Internal Structure) दाखवली आहे.
  • यात उजवीकडून डावीकडे Bit 0 पासून Bit 7 पर्यंत एकूण ८ स्विचेस एका Box मध्ये मांडले आहेत.
  • हे ८ स्विचेस एकत्र येऊन जो एक पूर्ण ब्लॉक तयार होतो, त्यालाच आपण 1 Byte म्हणतो.

महत्त्वाचा नियम: CPU जेव्हाही RAM मधून डेटा Read किंवा Write करतो, तेव्हा तो कमीत कमी १ पूर्ण Byte (८ Bits) एकत्र उचलतो. जरी तुम्हाला फक्त एकच Bit बदलायचा असला, तरी CPU तो पूर्ण Byte स्वतःकडे घेतो, त्यातला Bit बदलतो आणि तो पूर्ण Byte परत RAM मध्ये ठेवून देतो.


३. Memory Addressing

मेमरी ॲड्रेस (Memory Addressing) कसे दिले जातात?

आता आपल्याला माहित आहे की डेटा Bytes च्या स्वरूपात साठवला जातो. पण CPU ला बरोबर तोच Byte कसा सापडतो जिथे तुमचा Variable किंवा Data आहे? यासाठी Memory Addresses वापरले जातात.

RAM च्या Architecture मध्ये, प्रत्येक Byte ला एक युनिक क्रमांक दिलेला असतो (जसा आपल्या घराचा पिन कोड किंवा पत्ता असतो). हा पत्ता वाचायला सोपा जावा म्हणून सहसा Hexadecimal (उदा. 0x0001) format मध्ये लिहिला जातो.

Visual : memory-table
╭──────────────────┬────────────────────────────┬──────────────────╮
│ Memory Address │ Data in Byte (8 Bits) │ Value Meaning │
├──────────────────┼────────────────────────────┼──────────────────┤
│ 0x00000001 │ [0][1][0][0][0][0][0][1] │ ⟵ 'A' Character │
│ 0x00000002 │ [0][0][0][0][0][0][0][0] │ ⟵ False Value │
│ 0x00000003 │ [1][1][1][1][1][1][1][1] │ ⟵ 255 Value │
│ 0x00000004 │ [0][0][0][0][0][0][0][1] │ ⟵ True Value │
╰──────────────────┴────────────────────────────┴──────────────────╯

या आकृतीत काय दाखवले आहे?

  • या diagram मध्ये RAM ची रचना एखाद्या Excel Sheet सारखी दाखवली आहे.
  • डाव्या बाजूला Hexadecimal format मधील Memory Addresses आहेत (उदा. 0x00000001).
  • उजव्या बाजूला त्या विशिष्ट Address वर साठवलेला ८ Bits (1 Byte) चा डेटा दाखवला आहे.
  • उदाहरणादाखल, वेगवेगळ्या Address वर 'A' हे अक्षर, False value, 255 हा Number आणि True value बायनरीमध्ये कशी दिसते हे दाखवले आहे.

जेव्हा JavaScript मधील एखादे इंजिन एखादा Variable डिक्लेअर करते (उदा. let x = true;), तेव्हा ते Operating System कडे RAM मध्ये थोडी जागा मागते. Operating System एखादा रिकामा पत्ता (उदा. 0x00000004) शोधते आणि त्या पत्त्यावर 00000001 ही value नेऊन ठेवते.

या संकल्पनेचे मुख्य मुद्दे:

  • ◯ Byte म्हणजे काय: एक Byte (८ Bits) हा Memory मधील Data store आणि read करण्याचा सर्वात लहान युनिट (Unit) आहे.
  • ◯ Addressable Unit: संगणकाच्या RAM मध्ये डेटा साठवण्याचे सर्वात लहान ॲड्रेस करण्यायोग्य एकक 'Byte' असते. मेमरीचा पत्ता एका Bit ला नसून ८ Bits च्या गटाला मिळतो.
  • ◯ सलग रचना: तांत्रिकदृष्ट्या, मेमरी ही लागून-लागून (Continuously) Allocate केलेल्या अब्जावधी Bytes ने बनलेली एक सलग जागा आहे.
  • ◯ सलग रचना: तांत्रिकदृष्ट्या, मेमरी ही लागून-लागून (Continuously) Allocate केलेल्या अब्जावधी Bytes ने बनलेली एक सलग जागा आहे.

💡 Technical Key Takeaway:

कोणतीही आधुनिक Programming Language असो, मग ती JavaScript असो वा दुसरी कोणतीही, ती शेवटी या ८-बिटच्या डब्यांवर आणि Memory Address वरच खेळत असते. जर तुमचा हा 'First Principles' चा बेस पक्का असेल, तर भविष्यात Memory Leaks शोधणे आणि Performance Optimization करणे तुम्हाला खूप सोपे जाईल!

जावास्क्रिप्ट (JavaScript) मधील Call Stack आणि Event Loop: एक छोटा धडा

JavaScript 'under-the-hood' कसे काम करते याची एक छोटी झलक खालीलप्रमाणे आहे.

१. Call Stack [ ☰ ] हे एक डेटा स्ट्रक्चर आहे जे 'LIFO' (Last In, First Out) तत्त्वावर काम करते. जेव्हा आपण एखादे function चालवतो, तेव्हा ते stack च्या सर्वात वर जोडले जाते [ ➔ ]. त्या function चे काम पूर्ण झाल्यावर ते तिथून काढून टाकले जाते [ ↶ ].

२. Web APIs [ ⚙ ] setTimeout, DOM events किंवा asynchronous कामे JavaScript इंजिन स्वतः करत नाही, तर ती ब्राउझरच्या Web APIs कडे सोपवली जातात. तिथे त्यांचे टायमर चालतात किंवा डेटा फेच होतो [ ◷ ]. यामुळे आपला मुख्य कोड (main thread) अडकत नाही [ ✓ ].

३. Event Loop [ ↻ ] Event Loop चे काम खूप सोपे पण महत्त्वाचे आहे. तो सतत तपासत असतो [ ⌕ ] की Call Stack रिकामा आहे का. जर तो रिकामा असेल आणि Task Queue मध्ये एखादे function तयार असेल, तर Event Loop त्याला Queue मधून उचलतो आणि Stack मध्ये ढकलतो [ ⚡ ].

महत्त्वाची सूचना [ ⚠ ] : मोठी किंवा वेळ खाणारी कामे नेहमी asynchronous पद्धतीने हाताळा, जेणेकरून तुमचा Call Stack ब्लॉक होणार नाही आणि युजर इंटरफेस सुरळीत चालेल.

(टीप: या धड्यात इमोजींऐवजी [ ☰ ], [ ➔ ], [ ⚙ ], [ ◷ ], [ ↻ ], [ ⚠ ] यांसारख्या Google Docs मधील Special Characters चा वापर केला आहे.)

☰ [ ☰ ], [ ➔ ], [ ⚙ ], [ ◷ ], [ ↻ ], [ ⚠ ]