একটি আধুনিক প্রসেসরের মেমরি সাবসিস্টেমটি তার শব্দ আকারের গ্রানুলারিটি এবং প্রান্তিককরণে মেমরি অ্যাক্সেসের মধ্যে সীমাবদ্ধ; এটি বেশ কয়েকটি কারণে কেস হয়।
গতি
আধুনিক প্রসেসরগুলির ক্যাশে মেমরির একাধিক স্তর রয়েছে যা অবশ্যই ডেটা দিয়ে টানতে পারে; একক বাইট রিড সমর্থন করে মেমরি সাবসিস্টেম থ্রুপুটটিকে শক্তভাবে এক্সিকিউশন ইউনিট থ্রুপুট (ওরফে সিপিইউ-আবদ্ধ) হিসাবে আবদ্ধ করে তোলে; এটিই স্মরণ করিয়ে দেয় যে হার্ড ড্রাইভে একই কারণে অনেকগুলি কারণে ডিএমএ দ্বারা পিআইও মোডকে কীভাবে ছাড়িয়ে গিয়েছিল ।
সিপিইউ সর্বদা তার শব্দের আকারে (32-বিট প্রসেসরের 4 বাইট) পড়ে থাকে, সুতরাং যখন আপনি একটি স্বাক্ষরবিহীন ঠিকানার অ্যাক্সেস করেন - এমন কোনও প্রসেসরে এটি সমর্থন করে - প্রসেসর একাধিক শব্দ পড়তে চলেছে। সিপিইউ মেমরির প্রতিটি শব্দ পড়বে যা আপনার অনুরোধ করা ঠিকানাটি বিভক্ত হয়। এটি অনুরোধিত ডেটা অ্যাক্সেস করতে প্রয়োজনীয় মেমরি লেনদেনের সংখ্যা 2X পর্যন্ত বাড়িয়ে তোলে।
এ কারণে, চারটির চেয়ে দুটি বাইট পড়তে খুব সহজেই ধীর হতে পারে। উদাহরণস্বরূপ, বলুন আপনার মেমরির একটি কাঠামো রয়েছে যা দেখতে দেখতে এটির মতো দেখাচ্ছে:
struct mystruct {
char c; // one byte
int i; // four bytes
short s; // two bytes
}
একটি 32-বিট প্রসেসরে এটি সম্ভবত এখানে দেখানো মত প্রান্তিককরণ করা হবে:
প্রসেসর এই সদস্যদের প্রত্যেককে একটি লেনদেনে পড়তে পারে।
বলুন আপনার স্ট্রাক্টের একটি প্যাক সংস্করণ ছিল, সম্ভবত সেই নেটওয়ার্ক থেকে যেখানে এটি ট্রান্সমিশন দক্ষতার জন্য প্যাক করা হয়েছিল; এটি দেখতে এরকম কিছু দেখাচ্ছে:
প্রথম বাইট পড়া একই হতে চলেছে।
আপনি প্রসেসরের কাছে আপনাকে 0x0005 থেকে 16 বিট দিতে বললে 0x0004 থেকে কোনও শব্দ পড়তে হবে এবং এটি 16-বিট রেজিস্টারে রাখার জন্য বাম 1 বাইটে স্থানান্তরিত করতে হবে; কিছু অতিরিক্ত কাজ, তবে বেশিরভাগ এটি একটি চক্রের মধ্যে পরিচালনা করতে পারে।
আপনি 0x0001 থেকে 32 বিটের জন্য জিজ্ঞাসা করলে আপনি একটি 2 এক্স পরিবর্ধন পাবেন। প্রসেসর 0x0000 থেকে ফলাফল নিবন্ধের মধ্যে পড়বে এবং বাম 1 বাইট শিফট করবে, তারপরে 0x0004 থেকে আবার অস্থায়ী রেজিস্টারে পড়বে, ডানদিকে 3 বাইট শিফট OR
করবে , তারপরে এটি ফলাফলের নিবন্ধের সাথে থাকবে।
পরিসর
প্রদত্ত কোনও ঠিকানার জায়গার জন্য, যদি আর্কিটেকচারটি ধরে নিতে পারে যে 2 টি এলএসবি সর্বদা 0 (যেমন, 32-বিট মেশিন) থাকে তবে এটি 4 গুণ বেশি মেমোরি অ্যাক্সেস করতে পারে (2 টি সংরক্ষিত বিট 4 স্বতন্ত্র অবস্থার প্রতিনিধিত্ব করতে পারে), বা একই পরিমাণে পতাকা হিসাবে কিছু জন্য 2 বিট সঙ্গে মেমরি। কোনও ঠিকানা ছাড়াই 2 টি এলএসবি নেওয়া আপনাকে একটি 4-বাইট প্রান্তিককরণ দেয়; এছাড়াও 4 বাইট একটি ধাপ হিসাবে চিহ্নিত করা হয় । প্রতিবার কোনও ঠিকানা বর্ধিত হলে এটি কার্যকরভাবে বিট 2 বৃদ্ধি করে, বিট 0 হয় না, অর্থাৎ শেষ 2 বিট সর্বদা চলতে থাকবে 00
।
এটি এমনকি সিস্টেমের দৈহিক নকশাকেও প্রভাবিত করতে পারে। যদি অ্যাড্রেস বাসে 2 টি কম বিটের প্রয়োজন হয়, সিপিইউতে 2 টি কম পিন এবং সার্কিট বোর্ডে 2 টি কম চিহ্ন থাকতে পারে।
পারমাণবিক পরিমাণ
সিপিইউ পারমাণবিকভাবে মেমরির এক প্রান্তযুক্ত শব্দের উপর পরিচালনা করতে পারে যার অর্থ অন্য কোনও নির্দেশ সেই অপারেশনটিতে বাধা দিতে পারে না। এটি অনেকগুলি লক-ফ্রি ডেটা স্ট্রাকচার এবং অন্যান্য সম্মতিযুক্ত দৃষ্টান্তগুলির সঠিক ক্রিয়াকলাপের জন্য গুরুত্বপূর্ণ ।
উপসংহার
প্রসেসরের মেমরি সিস্টেমটি এখানে বর্ণিত চেয়ে কিছুটা জটিল এবং জড়িত; কোনও x86 প্রসেসর কীভাবে প্রকৃতপক্ষে মেমরিটিকে সম্বোধন করে তার উপর আলোচনা (অনেকগুলি প্রসেসর একইভাবে কাজ করে)।
মেমরি প্রান্তিককরণ মেনে চলার আরও অনেক সুবিধা রয়েছে যা আপনি এই আইবিএম নিবন্ধে পড়তে পারেন ।
কম্পিউটারের প্রাথমিক ব্যবহার হ'ল ডেটা ট্রান্সফর্ম করা। আধুনিক মেমরি আর্কিটেকচার এবং প্রযুক্তিগুলি বেশ নির্ভরযোগ্য উপায়ে - আরও ডেটা, ইন, আউট এবং আরও বেশি দ্রুত কার্যকরকরণ ইউনিটের মধ্যে পাওয়ার সুবিধার জন্য কয়েক দশক ধরে অনুকূলীকৃত হয়েছে।
বোনাস: ক্যাশে
পারফরম্যান্সের জন্য আরও একটি প্রান্তিককরণ যা আমি পূর্বে ইঙ্গিত করেছিলাম তা হ'ল ক্যাশে লাইনে প্রান্তিককরণ যা (উদাহরণস্বরূপ, কিছু সিপিইউতে) 64 বি।
ক্যাশে উপার্জনের মাধ্যমে কতটা পারফরম্যান্স অর্জন করা যায় সে সম্পর্কে আরও তথ্যের জন্য , প্রসেসরের ক্যাশে প্রভাবগুলির গ্যালারীটি একবার দেখুন ; ক্যাশে-লাইন আকারে এই প্রশ্ন থেকে
নির্দিষ্ট ধরণের প্রোগ্রামের অপ্টিমাইজেশনের জন্য ক্যাশে লাইনগুলি বোঝা গুরুত্বপূর্ণ হতে পারে। উদাহরণস্বরূপ, ডেটা সারিবদ্ধকরণ নির্ধারণ করতে পারে কোনও অপারেশন এক বা দুটি ক্যাশে লাইন স্পর্শ করে কিনা। উপরের উদাহরণে যেমন আমরা দেখেছি, এর অর্থ সহজেই বোঝানো যেতে পারে যে ভুল পথে চালিত মামলায় অপারেশন দ্বিগুণ ধীর হয়ে যাবে।