সংক্ষিপ্ত উত্তর: উপলভ্য ঠিকানাগুলির সংখ্যাগুলি এর চেয়ে ছোটগুলির সমান:
- বাইটে মেমরির আকার
- গ্রেটেস্ট স্বাক্ষরযুক্ত পূর্ণসংখ্যা যা সিপিইউর মেশিন শব্দে সংরক্ষণ করা যায়
দীর্ঘ উত্তর এবং উপরের ব্যাখ্যা:
মেমোরিতে বাইট (বি) থাকে। প্রতিটি বাইটে 8 টি বিট (বি) থাকে।
1 B = 8 b
1 জিবি র্যাম আসলে 1 জিবিবি (গিগাবাইট, গিগাবাইট নয়)। পার্থক্য হল:
1 GB = 10^9 B = 1 000 000 000 B
1 GiB = 2^30 B = 1 073 741 824 B
মেমরির প্রতিটি বাইটের নিজস্ব ঠিকানা থাকে, সিপিইউ মেশিনের শব্দটি যত বড় হোক না কেন। যেমন। ইন্টেল 8086 সিপিইউ 16-বিট ছিল এবং এটি বাইট দ্বারা মেমরিটিকে সম্বোধন করছে, তাই আধুনিক 32-বিট এবং 64-বিট সিপিইউ করুন। এটি প্রথম সীমাবদ্ধতার কারণ - আপনার মেমরি বাইটের চেয়ে বেশি ঠিকানা থাকতে পারে না।
মেমোরি ঠিকানাটি সিপিইউর সন্ধান করা একটিকে পেতে মেমরির শুরু থেকে এড়াতে কেবলমাত্র কয়েকটি বাইট।
- প্রথম বাইটটি অ্যাক্সেস করতে এটি 0 বাইট ছেড়ে যেতে হয়, তাই প্রথম বাইটের ঠিকানা 0 হয়।
- দ্বিতীয় বাইট অ্যাক্সেস করতে এটিকে 1 বাইট এড়িয়ে যেতে হবে, সুতরাং এর ঠিকানাটি 1।
- (এবং আরও ...)
- শেষ বাইটটি অ্যাক্সেস করতে, সিপিইউ 1073741823 বাইট বাদ দেয়, তাই এর ঠিকানাটি 1073741823।
এখন আপনাকে 32-বিটের প্রকৃত অর্থ কী তা জানতে হবে। যেমনটি আমি আগেই উল্লেখ করেছি যে এটি কোনও মেশিন শব্দের আকার।
মেশিন শব্দ হ'ল সংখ্যার (র্যাম, ক্যাশে বা অভ্যন্তরীণ রেজিস্টারে) ধারণ করতে মেমরির পরিমাণ CP 32-বিট সিপিইউ সংখ্যা ধরে রাখতে 32 বিট (4 বাইট) ব্যবহার করে। মেমরি ঠিকানাগুলিও সংখ্যা, সুতরাং একটি 32-বিট সিপিইউতে মেমরি ঠিকানাটি 32 বিট নিয়ে থাকে।
এখন এটি সম্পর্কে চিন্তা করুন: আপনার যদি একটি বিট থাকে তবে আপনি এটিতে দুটি মান সংরক্ষণ করতে পারেন: 0 বা 1. আরও একটি বিট যুক্ত করুন এবং আপনার চারটি মান রয়েছে: 0, 1, 2, 3. তিনটি বিটের উপর আপনি আটটি মান সংরক্ষণ করতে পারবেন : 0, 1, 2 ... 6, 7. এটি আসলে একটি বাইনারি সিস্টেম এবং এটি এর মতো কাজ করে:
Decimal Binary
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
10 1010
11 1011
12 1100
13 1101
14 1110
15 1111
এটি যথাযথ সংযোজনের মতো ঠিক কাজ করে তবে সর্বোচ্চ সংখ্যা 1, নয় 9 দশমিক 0 হয় 0000
, তারপরে আপনি 1 যুক্ত করুন এবং পাবেন 0001
, আবার একবার যুক্ত করুন এবং আপনার কাছে রয়েছে 0010
। দশমিক থাকার 09
এবং একটি যুক্ত করার সাথে এখানে হ্যাশেন্ডটি হ'ল : আপনি 9 থেকে 0 পরিবর্তন করেন এবং পরবর্তী অঙ্ক বৃদ্ধি করেন।
উপরের উদাহরণ থেকে আপনি দেখতে পাচ্ছেন যে সর্বদা একটি বিটগুলির স্থির সংখ্যার সাথে আপনি একটি সংখ্যায় রাখতে পারেন সর্বোচ্চ মূল্য - কারণ যখন সমস্ত বিট 1 হয় এবং আপনি 1 দিয়ে মান বাড়ানোর চেষ্টা করেন, সমস্ত বিট 0 হয়ে যাবে, এভাবে বিভাজনকে ভেঙে সংখ্যা। একে একে পূর্ণসংখ্যার ওভারফ্লো বলা হয় এবং এটি ব্যবহারকারী এবং বিকাশকারী উভয়ের জন্যই অনেক অপ্রীতিকর সমস্যা সৃষ্টি করে।
11111111 = 255
+ 1
-----------
100000000 = 0 (9 bits here, so 1 is trimmed)
- 1 বিটের জন্য সর্বাধিক মান 1,
- 2 বিট - 3,
- 3 বিট - 7,
- 4 বিট - 15
সর্বাধিক সম্ভাব্য সংখ্যাটি সর্বদা 2 ^ N-1 হয়, যেখানে বিটের সংখ্যা N হয়। আমি আগেই বলেছি, একটি মেমরি ঠিকানা একটি সংখ্যা এবং এর সর্বাধিক মানও থাকে। এ কারণেই মেশিন শব্দের আকারও উপলব্ধ মেমরি ঠিকানার সংখ্যার সীমাবদ্ধ - কখনও কখনও আপনার সিপিইউ কেবল আরও মেমরির ঠিকানা জানাতে যথেষ্ট সংখ্যক প্রক্রিয়া করতে পারে না।
সুতরাং 32 বিটগুলিতে আপনি 0 থেকে 2 ^ 32-1 পর্যন্ত সংখ্যা রাখতে পারেন এবং এটি 4 294 967 295 1 এটি 1 জিবি র্যামের সর্বাধিক ঠিকানার চেয়ে বেশি, সুতরাং আপনার নির্দিষ্ট ক্ষেত্রে র্যামের পরিমাণ সীমিত হওয়ার কারণ হবে।
32-বিট সিপিইউর র্যাম সীমা তাত্ত্বিকভাবে 4 জিবি (2 ^ 32) এবং )৪-বিট সিপিইউ এর জন্য এটি 16 ইবি (এক্সাবাইটস, 1 ইবি = 2 ^ 30 জিবি)। অন্য কথায়, Internet৪-বিট সিপিইউ পুরো ইন্টারনেট ... 200 বার;) ( ওল্ফ্রামআল্ফা দ্বারা অনুমান করা ) সম্বোধন করতে পারে ।
তবে, রিয়েল-লাইফ অপারেটিং সিস্টেমে 32-বিট সিপিইউ প্রায় 3 জিবি র্যামের ঠিকানা দিতে পারে। এটি অপারেটিং সিস্টেমের অভ্যন্তরীণ আর্কিটেকচারের কারণে - কিছু ঠিকানা অন্যান্য উদ্দেশ্যে সংরক্ষণ করা হয়। আপনি উইকিপিডিয়ায় এই তথাকথিত 3 জিবি বাধা সম্পর্কে আরও পড়তে পারেন । আপনি শারীরিক ঠিকানা এক্সটেনশন দিয়ে এই সীমাটি তুলতে পারেন ।
মেমরি অ্যাড্রেসিং সম্পর্কে কথা বলার মতো, কয়েকটি জিনিস আমার উল্লেখ করা উচিত: ভার্চুয়াল মেমরি , বিভাগকরণ এবং পেজিং ।
ভার্চুয়াল মেমরি
@ ড্যানিয়েল আর হিক্স অন্য উত্তরে যেমন উল্লেখ করেছেন, ওএস ভার্চুয়াল মেমরি ব্যবহার করে। এর অর্থ হ'ল অ্যাপ্লিকেশনগুলি প্রকৃত মেমরি ঠিকানার উপর চালিত হয় না, তবে ওএস সরবরাহ করে।
এই কৌশলটি অপারেটিং সিস্টেমটিকে র্যাম থেকে কিছু তথাকথিত পেজফাইলে (উইন্ডোজ) বা অদলবদল (* এনআইএক্স) স্থানান্তর করতে দেয়। এইচডিডি হ'ল র্যামের তুলনায় কিছুটা ধীরে ধীরে ধীরে ধীরে অ্যাক্সেস করা ডেটার জন্য এটি কোনও গুরুতর সমস্যা নয় এবং এটি ওএসকে অ্যাপ্লিকেশনগুলিকে আপনার ইনস্টল করার চেয়ে বেশি র্যাম সরবরাহ করতে দেয়।
পেজিং
আমরা এখন পর্যন্ত যা বলছিলাম তাকে ফ্ল্যাট অ্যাড্রেসিং স্কিম বলা হয়।
পেজিং হ'ল একটি বিকল্প সম্বোধন পরিকল্পনা যা আপনি সাধারণত ফ্ল্যাট মডেলটিতে একটি মেশিন শব্দ দিয়ে আরও মেমরির ঠিকানা দিতে পারবেন।
4-অক্ষরের শব্দের দ্বারা পূর্ণ একটি বই কল্পনা করুন। ধরা যাক প্রতিটি পৃষ্ঠায় 1024 নম্বর রয়েছে। একটি নম্বর সম্বোধনের জন্য, আপনাকে দুটি জিনিস জানতে হবে:
- যে পৃষ্ঠাতে এই শব্দটি মুদ্রিত হয়েছে তার সংখ্যা।
- সেই পৃষ্ঠায় কোন শব্দটি আপনি সন্ধান করছেন।
এখন ঠিক এইভাবেই আধুনিক x86 সিপিইউ মেমরি পরিচালনা করে। এটি 4 কিবি পৃষ্ঠায় বিভক্ত (প্রতিটি 1024 মেশিন শব্দ) এবং সেই পৃষ্ঠাগুলির সংখ্যা রয়েছে। (আসলে পৃষ্ঠাগুলি 4 এমআইবি বড় বা পিএই সহ 2 মাইবিও হতে পারে )। আপনি যখন মেমোরি সেলটি সম্বোধন করতে চান তখন আপনার সেই পৃষ্ঠাতে পৃষ্ঠা নম্বর এবং ঠিকানা প্রয়োজন। নোট করুন যে প্রতিটি মেমোরি সেল হুবহু এক জোড়া সংখ্যার দ্বারা রেফারেন্স করা হয়, এটি বিভাজনের ক্ষেত্রে হবে না।
সেগমেন্টেশন
ঠিক আছে, এটি পেজিংয়ের সাথে বেশ মিল। এটি কেবলমাত্র একটি উদাহরণ দেওয়ার জন্য, ইন্টেল 8086 এ ব্যবহৃত হয়েছিল। ঠিকানাগুলির গোষ্ঠীগুলিকে এখন পৃষ্ঠাগুলি নয়, মেমরি বিভাগগুলি বলা হয়। পার্থক্যটি হল বিভাগগুলি ওভারল্যাপ করতে পারে এবং তারা প্রচুর পরিমাণে ওভারল্যাপ করে। উদাহরণস্বরূপ, ৮০86 on-তে বেশিরভাগ মেমরি সেল 4096 টি বিভিন্ন বিভাগ থেকে পাওয়া যায়।
একটি উদাহরণ:
ধরা যাক আমাদের 8 বাইট মেমরি আছে, 4 holding বাইট ব্যতীত সমস্ত হোল্ডার জিরো যা 255 এর সমান।
ফ্ল্যাট মেমরি মডেলের উদাহরণ:
_____
| 0 |
| 0 |
| 0 |
| 255 |
| 0 |
| 0 |
| 0 |
| 0 |
-----
4-বাইট পৃষ্ঠাগুলি সহ পেজযুক্ত মেমরির চিত্র :
PAGE0
_____
| 0 |
| 0 |
| 0 | PAGE1
| 255 | _____
----- | 0 |
| 0 |
| 0 |
| 0 |
-----
4-বাইট বিভাগগুলি 1 দ্বারা স্থানান্তরিত সহ বিভাগযুক্ত মেমরির চিত্রণ :
SEG 0
_____ SEG 1
| 0 | _____ SEG 2
| 0 | | 0 | _____ SEG 3
| 0 | | 0 | | 0 | _____ SEG 4
| 255 | | 255 | | 255 | | 255 | _____ SEG 5
----- | 0 | | 0 | | 0 | | 0 | _____ SEG 6
----- | 0 | | 0 | | 0 | | 0 | _____ SEG 7
----- | 0 | | 0 | | 0 | | 0 | _____
----- | 0 | | 0 | | 0 | | 0 |
----- ----- ----- -----
আপনি দেখতে পাচ্ছেন, চতুর্থ বাইটকে চারভাবে সম্বোধন করা যেতে পারে: (0 থেকে সম্বোধন)
- বিভাগ 0, অফসেট 3
- বিভাগ 1, অফসেট 2
- বিভাগ 2, অফসেট 1
- বিভাগ 3, অফসেট 0
এটি সর্বদা একই মেমরি সেল হয়।
বাস্তব জীবনে বাস্তবায়নের অংশগুলিকে 1 বাইটের বেশি স্থানান্তরিত করা হয় (8086 এর জন্য এটি 16 বাইট ছিল)।
বিভাগকরণ সম্পর্কে যা খারাপ তা হ'ল এটি জটিল (তবে আমি মনে করি আপনি ইতিমধ্যে এটি জানেন;) কী ভাল, আপনি মডিউলার প্রোগ্রামগুলি তৈরি করতে কিছু চালাক কৌশল ব্যবহার করতে পারেন।
উদাহরণস্বরূপ আপনি একটি বিভাগে কিছু মডিউল লোড করতে পারেন, তারপরে সেগমেন্টটি সত্যিকারের তুলনায় আরও ছোট (মডিউলটি ধরে রাখার পক্ষে যথেষ্ট ছোট), তারপরে প্রথম বিভাগটি বেছে নিন যা সেই সিউডো-ছোট একটিতে ওভারল্যাপ না করে এবং পরবর্তী মডিউলটি লোড করুন , ইত্যাদি। মূলত আপনি এইভাবে যা পান তা ভেরিয়েবল আকারের পৃষ্ঠা।