প্রথমত, র্যামের সাথে এটির কোনও সম্পর্ক নেই। আমরা এখানে ঠিকানা জায়গার কথা বলছি - আপনার কাছে কেবল 16 মাইবি মেমরি থাকলেও, আপনার কাছে এখনও 32-বিট সিপিইউতে ঠিকানার 32 বিট থাকে space
এটি ইতিমধ্যে আপনার প্রথম প্রশ্নের উত্তর দেয়, সত্যই - এই সময়টি তৈরি করা হয়েছিল, রিয়েল ওয়ার্ল্ড পিসিগুলির মেমরির পুরো 4 জিবিবি কোথাও ছিল না; তারা মেমরির 1-16 মাইবি এর পরিসীমাতে বেশি ছিল। ঠিকানা স্থানটি সমস্ত উদ্দেশ্য এবং উদ্দেশ্যে বিনামূল্যে ছিল।
এখন, 0xFFFFFFFF0 ঠিক কেন? সিপিইউ জানেন না যে সেখানে কতটা বিআইওএস আছে। কিছু BIOS কেবল কয়েক কিলোবাইট নিতে পারে, অন্যরা মেমরি পুরো মেগাবাইট নিতে পারে - এবং আমি এমনকি বিভিন্ন optionচ্ছিক র্যামেও পাচ্ছি না। শুরু করার জন্য সিপিইউ অবশ্যই কিছু ঠিকানায় হার্ডওয়্যারড থাকতে হবে - সিপিইউ কনফিগার করার দরকার নেই। তবে এটি কেবল ঠিকানা জায়গার একটি ম্যাপিং - ঠিকানাটি সরাসরি বায়োস রম চিপকে ম্যাপ করা হয় (হ্যাঁ, এর অর্থ আপনি এই মুহুর্তে র্যামের পুরো 4 গিগাবাইট অ্যাক্সেস পাবেন না যদি আপনার কাছে অনেকগুলি থাকে তবে - এটি বিশেষ কিছু নয়, অনেকগুলি ডিভাইসের ঠিকানা জায়গাতে তাদের নিজস্ব পরিসর প্রয়োজন)। একটি 32-বিট সিপিইউতে, এই ঠিকানাটি আপনাকে খুব বেসিক ইনিশিয়ালাইজেশন করতে পুরো 16 বাইট দেয় - যা আপনার বিভাগগুলি সেটআপ করার জন্য যথেষ্ট এবং প্রয়োজনে ঠিকানার মোড (মনে রাখবেন,বাস্তব বুট "পদ্ধতি"। এই মুহুর্তে, আপনি র্যামটি একেবারেই ব্যবহার করবেন না - এটি কেবলমাত্র রমকে ম্যাপ করেছে। আসলে, র্যাম এই মুহুর্তে ব্যবহারের জন্য প্রস্তুত নয় - এটি বায়োস পোস্টের অন্যতম কাজ! এখন, আপনি ভাবতে পারেন - কীভাবে একটি 16-বিট রিয়েল মোড 0xFFFFFFF0 ঠিকানায় প্রবেশ করতে পারে? অবশ্যই, খণ্ডগুলি রয়েছে, সুতরাং আপনার কাছে 20-বিট ঠিকানার স্থান রয়েছে, তবে এটি এখনও যথেষ্ট ভাল নয়। ঠিক আছে, এটিতে একটি কৌশল আছে - আপনার প্রথম দীর্ঘ লাফ চালানো না হওয়া পর্যন্ত ঠিকানার 12 টি উচ্চ বিট সেট করা থাকে, আপনাকে উচ্চ ঠিকানার জায়গাতে অ্যাক্সেস দেয় (যখন 0xFFF00000 এর চেয়ে কম কিছুতে অ্যাক্সেস প্রত্যাখ্যান করা হয় - যতক্ষণ না আপনি একটি দীর্ঘ জাম্প কার্যকর না করেন) ।
এই সমস্ত জিনিসগুলি আধুনিক অপারেটিং সিস্টেমগুলিতে বেশিরভাগ প্রোগ্রামারদের (ব্যবহারকারীদের উল্লেখ না করার জন্য) গোপন থাকে। আপনার কাছে এত নিম্ন স্তরের কোনও কিছুরই সাধারণত অ্যাক্সেস থাকে না - কিছু জিনিস ইতিমধ্যে উদ্ধার ছাড়িয়ে যায় (আপনি সিপিইউ মোডগুলি উইলি-নিলি স্যুইচ করতে পারবেন না), কিছু কিছু ওএস কার্নেল দ্বারা একচেটিয়াভাবে পরিচালিত হয়।
এমএস ডস-এ পুরানো স্কুল কোডিং থেকে একটি দুর্দান্ত ভিউ আসে। ডিভাইস মেমরির অন্য সাধারণ উদাহরণটি স্পেসের ঠিকানার সাথে সরাসরি ম্যাপ করা হচ্ছে ভিডিও মেমোরিতে সরাসরি অ্যাক্সেস। উদাহরণস্বরূপ, আপনি যদি ডিসপ্লেতে দ্রুত পাঠ্যটি লিখতে চেয়েছিলেন তবে আপনি সরাসরি ঠিকানায় লিখেছিলেন B800:0000
(প্লাস অফসেট - 80x25 টেক্সট মোডে, এর অর্থ (y * 80 + x) * 2
যদি আমার স্মৃতি আমাকে সঠিকভাবে পরিবেশন করে - অক্ষরে প্রতি দুটি বাইট, লাইন লাইন)। আপনি যদি পিক্সেল বাই পিক্সেল আঁকতে চেয়েছিলেন তবে আপনি একটি গ্রাফিক্স মোড এবং প্রারম্ভের ঠিকানা ব্যবহার করেছেন A000:0000
(সাধারণত, 320x200 প্রতি পিক্সেল 8 বিটে)) উচ্চ-কার্য সম্পাদনমূলক কিছু করার অর্থ সাধারণত ডিভাইস ম্যানুয়ালগুলিতে ডুব দেওয়া, কীভাবে সেগুলিতে সরাসরি অ্যাক্সেস করবেন তা নির্ধারণ করা।
এটি আজ অবধি টিকে আছে - এটি কেবল লুকানো। উইন্ডোজে, আপনি ডিভাইস ম্যানেজারের ডিভাইসে ম্যাপ করা মেমরি ঠিকানাগুলি দেখতে পারেন - আপনার নেটওয়ার্ক কার্ডের মতো কোনও কিছুর বৈশিষ্ট্য খোলার জন্য, সংস্থানসমূহ ট্যাবে যান - সমস্ত মেমরি রেঞ্জের আইটেমগুলি ডিভাইস মেমরি থেকে আপনার মূল ঠিকানার জায়গায় ম্যাপিং হয় ings এবং 32-বিটের উপর, আপনি দেখতে পাবেন যে সেই ডিভাইসগুলির বেশিরভাগটি 2 GiB (পরে 3 GiB) চিহ্নের উপরে ম্যাপ করা আছে - আবার ব্যবহারকারীর-ব্যবহারযোগ্য মেমরির সাথে দ্বন্দ্ব হ্রাস করতে, যদিও এটি ভার্চুয়াল মেমরির সাথে আসলেই কোনও সমস্যা নয় ( অ্যাপ্লিকেশনগুলি আসল, হার্ডওয়্যার ঠিকানা জায়গার কাছাকাছি কোথাও পায় না - তাদের নিজস্ব মেমরির ভার্চুয়ালাইজড অংশ রয়েছে, যা র্যাম, রম, ডিভাইসগুলি বা পৃষ্ঠা ফাইলটিতে ম্যাপ করা যেতে পারে)।
স্ট্যাকের হিসাবে, ভাল, এটি ডিফল্টরূপে, স্ট্যাকটি শীর্ষ থেকে বেড়ে যায় তা বুঝতে সহায়তা করা উচিত। সুতরাং আপনি যদি push
এটি করেন তবে নতুন স্ট্যাক পয়েন্টারটি থাকবে 0xFFFFFEC
- অন্য কথায়, আপনি BIOS সূচনার ঠিকানায় লেখার চেষ্টা করছেন না :) অবশ্যই এর অর্থ BIOS আর্ট রুটিনগুলি পুনরায় তৈরি করার আগে স্ট্যাকটি নিরাপদে ব্যবহার করতে পারে কোথাও আরও দরকারী। পুরাতন-স্কুল প্রোগ্রামিংয়ে, পেজিং ডি-ফ্যাক্টো ডিফল্ট হওয়ার আগে, সাধারণত র্যামের শেষে স্ট্যাকটি শুরু হয় এবং আপনি যখন নিজের অ্যাপ্লিকেশন মেমরির উপরে ওভাররাইট করা শুরু করেন তখন "স্ট্যাক ওভারফ্লো" ঘটেছিল। মেমরি সুরক্ষা এর অনেক কিছুই বদলেছে, তবে সাধারণভাবে, এটি যথাসম্ভব পিছনের সামঞ্জস্যতা বজায় রাখে - নোট করুন এমনকি আধুনিকতম x86-64 সিপিইউ এখনও এমএস ডস 5 কীভাবে বুট করতে পারে - বা উইন্ডোজ কীভাবে এখনও অনেকগুলি ডস অ্যাপ্লিকেশন চালাতে পারে যার পেজিং সম্পর্কে কোনও ধারণা নেই।