কার্নেল কীভাবে দূষিত প্রোগ্রামটিকে সমস্ত শারীরিক র‌্যাম পড়তে বাধা দেয়?


10

যদি আমি এমন কোনও প্রোগ্রাম লিখি যা প্রতিটি সম্ভাব্য ঠিকানায় মেমরি পড়ার চেষ্টা করে এবং আমি এটি একটি "পূর্ণ" ইউনিক্সে চালিত করি তবে এটি সমস্ত দৈহিক র‍্যাম অ্যাক্সেস করতে সক্ষম হবে না। তবে কীভাবে অপারেটিং সিস্টেম এটি করতে বাধা দেয়?

আমি ছোট সিপিইউ আর্কিটেকচারের সাথে আরও পরিচিত, যেখানে কোনও এসেম্বলি কোডের কোনও অংশই সমস্ত কিছু অ্যাক্সেস করতে পারে। আমি বুঝতে পারি না যে কোনও প্রোগ্রাম (কার্নেল) কীভাবে এই ধরনের দূষিত ক্রিয়াকলাপ সনাক্ত করতে পারে।


2
সাধারণত এমএমইউ খেয়াল রাখে যে আপনি অনুমতিপ্রাপ্ত জায়গাগুলির বাইরে মেমরি অ্যাক্সেস করতে পারবেন না।
অট--

1
ঠিক আছে, এমএমইউ সমাবেশ দ্বারা কনফিগার করা হয়েছে ured সুতরাং একটি সমাবেশ কোড MMU কনফিগারেশন পরিবর্তন করতে এবং একটি ভিন্ন মেমরি পৃষ্ঠা অ্যাক্সেস করতে পারেন, তাই না?
21

এটি কেবল সত্য যদি আপনি নিজের কোডটি রুট হিসাবে চালান।
অট--

2
পৃষ্ঠা-সারণী এবং সেখানে থাকা কার্নেল বিমূর্তি সম্পর্কে আপনার পড়া উচিত।
24:14

@ott: এমনকি রুট এমএমইউ সংশোধন করতে পারে না (কমপক্ষে লিনাক্সে নয়)। কেবল কার্নেলই করে।
বেসাইল স্টারিনকিভিচ

উত্তর:


12

এটি এমন কার্নেল নয় যা খারাপ স্মৃতি অ্যাক্সেসগুলি প্রতিরোধ করে, এটি সিপিইউ। কার্নেলের ভূমিকা কেবলমাত্র সিপিইউকে সঠিকভাবে কনফিগার করা।

আরও স্পষ্টভাবে, হার্ডওয়্যার উপাদান যা খারাপ মেমরির প্রবেশাধিকার প্রতিরোধ করে তা হ'ল এমএমইউ । যখন কোনও প্রোগ্রাম একটি মেমরি ঠিকানার অ্যাক্সেস করে, তখন ঠিকানাটি এমএমইউর সামগ্রীর উপর ভিত্তি করে সিপিইউ দ্বারা ডিকোড হয়। এমএমইউ ভার্চুয়াল ঠিকানা থেকে শারীরিক ঠিকানায় একটি অনুবাদ স্থাপন করে: যখন সিপিইউ একটি নির্দিষ্ট ভার্চুয়াল ঠিকানায় কোনও লোড বা স্টোর করে তখন এটি এমএমইউ সামগ্রীর উপর ভিত্তি করে সম্পর্কিত শারীরিক ঠিকানা গণনা করে। কার্নেলটি এমএমইউ কনফিগারেশনটি এমনভাবে সেট করে যে প্রতিটি প্রোগ্রাম কেবল মেমরির জন্য এটির অধিকারী access অন্যান্য প্রোগ্রামের মেমরি এবং হার্ডওয়্যার রেজিস্টারগুলিকে কোনও প্রোগ্রামের স্মৃতিতে ম্যাপ করা হয় না: এই প্রোগ্রামটির জন্য এমএমইউ কনফিগারেশনে এই শারীরিক ঠিকানাগুলির সাথে সম্পর্কিত ভার্চুয়াল ঠিকানা নেই।

বিভিন্ন প্রক্রিয়াগুলির মধ্যে একটি প্রসঙ্গে সুইচ-তে, কার্নেলটি এমএমইউ কনফিগারেশনটি পরিবর্তন করে যাতে এটিতে নতুন প্রক্রিয়ার জন্য পছন্দসই অনুবাদ থাকে।

কিছু ভার্চুয়াল অ্যাড্রেস একেবারেই ম্যাপ করা হয় না, অর্থাৎ এমএমইউ এগুলিকে একটি বিশেষ "এ জাতীয় কোনও ঠিকানা" মান হিসাবে অনুবাদ করে। প্রসেসর যখন একটি আনম্যাপড ঠিকানাটিকে অবজ্ঞাপন করে, তখন এটি একটি ফাঁদ সৃষ্টি করে: প্রসেসরটি কার্নেল কোডের একটি পূর্বনির্ধারিত স্থানে শাখা করে। কিছু ফাঁদ বৈধ; উদাহরণস্বরূপ ভার্চুয়াল ঠিকানাটি এমন কোনও পৃষ্ঠার সাথে সামঞ্জস্য করতে পারে যা সোয়াপ স্পেসে রয়েছে , সেক্ষেত্রে কার্নেল কোড পৃষ্ঠার সামগ্রীটি সোয়াপ থেকে লোড করবে তারপরে মূল প্রোগ্রামে এমনভাবে স্যুইচ করবে যাতে মেমরি অ্যাক্সেসের নির্দেশটি আবার কার্যকর করা হয়। অন্যান্য ফাঁদগুলি বৈধ নয়, এক্ষেত্রে প্রক্রিয়াটি এমন একটি সিগন্যাল গ্রহণ করে যা ডিফল্টরূপে তত্ক্ষণাত্ প্রোগ্রামটিকে হত্যা করে (এবং যদি প্রোগ্রামে সংকেত হ্যান্ডলারের শাখা না হয়: কোনও ক্ষেত্রে মেমরি অ্যাক্সেসের নির্দেশিকা সম্পন্ন হয়নি)।


আপনি কি কিছুটা বিবৃতি নির্দিষ্ট করতে পারবেন "এমপিইউয়ের সামগ্রীর উপর ভিত্তি করে সিপিইউ দ্বারা ঠিকানাটি ডিকোড করা হয়েছে" ? চলমান প্রোগ্রামে এমন কোনও আসল কোড রয়েছে যা ঠিকানাগুলি ডিকোড করে? অথবা যখন কোনও সিপিইউ কোনও ঠিকানায় অ্যাক্সেস তৈরি করে - এমএমইউতে অ্যাক্সেসটি সম্পন্ন হয়, যা এটিকে সঠিকভাবে অনুবাদ করে / পরিচালনা করে (মেমরি বা ক্যাশে অ্যাক্সেস তৈরি করে ফলাফলটি দেয়, বা কার্নেল পদ্ধতি ট্রিগার করে)? সুতরাং, মাইক্রোকন্ট্রোলার / সমাবেশের দৃষ্টিকোণ থেকে, এমএমইউ নতুন অংশ। সিপিইউ সরাসরি মেমোরির সাথে সংযুক্ত থাকে না, এটি এমএমইউতে সংযুক্ত থাকে এবং সেখানে ভার্চুয়াল মেমরি বিমূর্ততা সম্পন্ন হয়।
এক্সিলিট

3
@ এক্সিলিটগুলি ভার্চুয়াল ঠিকানা থেকে শারীরিক ঠিকানার অনুবাদ এমএমইউ-র ভিতরে করা হয়, এটি একটি হার্ডওয়্যার সার্কিট। প্রোগ্রামে বা কার্নেলে এটি করার কোনও কোড নেই। কার্নেলটি কেবলমাত্র ব্যতিক্রমী ক্ষেত্রে ব্যবহৃত হয়, যখন প্রোগ্রামটি ভার্চুয়াল ঠিকানার অ্যাক্সেস করার চেষ্টা করে যার জন্য এমএমইউ এন্ট্রি "অবৈধ ঠিকানা" বলে। এমএমইউ ব্যবহার করে র‌্যামে রেজিস্টার এবং টেবিলগুলি কনফিগার করার কাজও কার্নেলটি করে।
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.