সমস্ত আধুনিক সিপিইউতে বর্তমানে সম্পাদনকারী মেশিনের নির্দেশকে বাধা দেওয়ার ক্ষমতা রয়েছে । তারা পর্যাপ্ত স্থিতি সংরক্ষণ করে (সাধারণত, তবে সর্বদা নয়, স্ট্যাকের উপরে) পরে মৃত্যুদন্ড কার্যকর করা আবার সম্ভব করে তোলে , যেন কিছুই ঘটেছিল না (সাধারণত বাধাপ্রাপ্ত নির্দেশনা স্ক্র্যাচ থেকে পুনরায় শুরু করা হবে)। তারপরে তারা একটি বাধাপ্রাপ্ত হ্যান্ডলারটি কার্যকর করতে শুরু করে , যা কেবলমাত্র আরও মেশিন কোড, তবে একটি বিশেষ স্থানে স্থাপন করা হয় যাতে সিপিইউ জানতে পারে এটি কোথায় রয়েছে। বিঘ্নিত হ্যান্ডলারগুলি সর্বদা অপারেটিং সিস্টেমের কার্নেলের অংশ : এমন উপাদান যা সর্বাধিক অধিকারের সাথে চলে এবং অন্যান্য সমস্ত উপাদানগুলির তদারকির জন্য দায়ী। 1,2
বিঘ্নগুলি সিঙ্ক্রোনাস হতে পারে , এর অর্থ হ'ল সিপিইউ নিজেই সঞ্চালিত নির্দেশাবলীর, বা অ্যাসিনক্রোনাসের কোনও কিছুর প্রত্যক্ষ প্রতিক্রিয়া হিসাবে এটি ট্রিগার করে , মানে বাহ্যিক ইভেন্টের কারণে এগুলি একটি অনাকাঙ্ক্ষিত সময়ে ঘটে, যেমন নেটওয়ার্কে ডেটা আগত like বন্দর। কিছু লোক অবিচ্ছিন্ন বিঘ্নগুলির জন্য "বিঘ্নিত" শব্দটি সংরক্ষণ করে এবং পরিবর্তে সিঙ্ক্রোনাস বিঘ্নকে "ফাঁদ", "ফল্টস", বা "ব্যতিক্রম" বলে ডাকে তবে এই শব্দগুলির সকলের অন্য অর্থ রয়েছে তাই আমি "সংকীর্ণ বিঘ্ন" দিয়ে আটকে যাচ্ছি।
এখন, বেশিরভাগ আধুনিক অপারেটিং সিস্টেমগুলিতে প্রক্রিয়াগুলির ধারণা রয়েছে । একেবারে মৌলিক ক্ষেত্রে, এটি এমন একটি প্রক্রিয়া যার মাধ্যমে কম্পিউটার একই সাথে একাধিক প্রোগ্রাম চালাতে পারে তবে এটি অপারেটিং সিস্টেমগুলি মেমরি সুরক্ষা কীভাবে কনফিগার করে, এটি একটি মূল বিষয় যা বেশিরভাগের বৈশিষ্ট্য (তবে হায়, এখনও সমস্ত নয় ) আধুনিক সিপিইউ। এটি ভার্চুয়াল মেমরির সাথে যায়যা মেমরির ঠিকানা এবং র্যামের আসল অবস্থানগুলির মধ্যে ম্যাপিংকে পরিবর্তন করার ক্ষমতা। মেমোরি সুরক্ষা অপারেটিং সিস্টেমটিকে প্রতিটি প্রক্রিয়াটি র্যামের নিজস্ব ব্যক্তিগত অংশ দিতে দেয় যা কেবল এটি অ্যাক্সেস করতে পারে। এটি অপারেটিং সিস্টেমকে (কিছু প্রক্রিয়ার পক্ষ থেকে অভিনয় করে) র্যামের অঞ্চলগুলি কেবলমাত্র পঠনযোগ্য, সম্পাদনযোগ্য, একাধিক সহযোগী প্রক্রিয়াগুলির মধ্যে ভাগ করে নেওয়া হিসাবে চিহ্নিত করতে সক্ষম করে allows ইত্যাদি মেমরির একটি অংশ থাকবে যা কেবলমাত্র অ্যাক্সেসযোগ্য কার্নেল। 3
যতক্ষণ না প্রতিটি প্রক্রিয়া কেবলমাত্র সেই উপায়ে মেমরি অ্যাক্সেস করে যেভাবে সিপিইউকে অনুমতি দেওয়ার জন্য কনফিগার করা হয়েছে, মেমরির সুরক্ষা অদৃশ্য। যখন কোনও প্রক্রিয়া নিয়মগুলি ভঙ্গ করে, সিপিইউ একটি সিঙ্ক্রোনাস বাধা তৈরি করবে, কার্নেলকে জিনিসগুলি বাছাই করতে বলবে। এটি নিয়মিত ঘটে যে প্রক্রিয়াটি সত্যিই নিয়মগুলি ভঙ্গ করে না , প্রক্রিয়াটি চালিয়ে যাওয়ার অনুমতি দেওয়ার আগে কেবল কার্নেলের কিছু কাজ করা দরকার। উদাহরণস্বরূপ, অন্য কোনও কিছুর জন্য র্যামে স্থান ফাঁকা করার জন্য যদি কোনও প্রক্রিয়ার স্মৃতির একটি পৃষ্ঠাকে সোয়াপ ফাইলটিতে "উচ্ছেদ করা" দরকার হয়, কার্নেলটি পৃষ্ঠাটি অ্যাক্সেসযোগ্য হিসাবে চিহ্নিত করবে। পরবর্তী সময় প্রক্রিয়াটি এটি ব্যবহারের চেষ্টা করার পরে, সিপিইউ একটি মেমরি-সুরক্ষা বাধাগুলি উত্পন্ন করবে; কার্নেলটি অদলবদল থেকে পৃষ্ঠাটি পুনরুদ্ধার করবে, এটি যেখানে ছিল সেখানে ফিরে রাখবে, এটিকে আবার অ্যাক্সেসযোগ্য হিসাবে চিহ্নিত করবে এবং পুনরায় প্রয়োগ শুরু করবে।
তবে ধরুন যে প্রক্রিয়াটি সত্যিই নিয়মগুলি ভঙ্গ করেছে। এটি এমন কোনও পৃষ্ঠায় অ্যাক্সেস করার চেষ্টা করেছিল যা এর সাথে কোনও র্যাম ম্যাপ করা হয়নি, বা এটি এমন কোনও পৃষ্ঠা কার্যকর করার চেষ্টা করেছে যা মেশিন কোড বা যা কিছু নয় তা চিহ্নিত করা হয়েছে। সাধারণত "ইউনিক্স" নামে পরিচিত অপারেটিং সিস্টেমগুলির পরিবার এই পরিস্থিতিটি মোকাবেলায় সমস্ত সংকেত ব্যবহার করে । 4 সিগন্যালগুলি বিঘ্নের অনুরূপ, তবে এগুলি কার্নেল দ্বারা উত্পাদিত হয় এবং প্রসেস দ্বারা ফিল্ড করা হয়, হার্ডওয়ার দ্বারা উত্পন্ন না করে এবং কার্নেল দ্বারা ফিল্ড করা হয়। প্রক্রিয়া সংকেত হ্যান্ডলার সংজ্ঞায়িত করতে পারেতাদের নিজস্ব কোডে এবং কার্নেলটি তারা কোথায় তা বলুন। তারপরে এই সংকেত হ্যান্ডলারগুলি কার্যকর হওয়ার পরে নিয়ন্ত্রণের স্বাভাবিক প্রবাহকে বাধাগ্রস্ত করবে। সিগন্যালের সকলের একটি সংখ্যা এবং দুটি নাম রয়েছে, যার একটি হ'ল একটি ক্রিপ্টিক সংক্ষিপ্ত বিবরণ এবং অন্যটি কিছুটা কম ক্রিপ্টিক বাক্যাংশ। প্রক্রিয়াটি মেমোরি-সুরক্ষা নিয়মগুলি ভেঙে যখন সংকেত তৈরি হয় তা হ'ল 11 (নাম দ্বারা) এবং এর নামগুলি SIGSEGV
এবং "বিভাগকরণ ত্রুটি"। 5,6
সংকেত এবং বিঘ্নের মধ্যে একটি গুরুত্বপূর্ণ পার্থক্য হ'ল প্রতিটি সংকেতের জন্য একটি ডিফল্ট আচরণ থাকে । যদি অপারেটিং সিস্টেমটি সমস্ত বিঘ্নগুলির জন্য হ্যান্ডলারগুলি সংজ্ঞায়িত করতে ব্যর্থ হয়, তবে এটি ওএসের একটি বাগ, এবং সিপিইউ অনুপস্থিত হ্যান্ডলারটি চাওয়ার চেষ্টা করলে পুরো কম্পিউটারটি ক্র্যাশ হয়ে যায়। সমস্ত প্রক্রিয়াগুলির জন্য সংকেত হ্যান্ডলারগুলি সংজ্ঞায়িত করার প্রক্রিয়াগুলির কোনও বাধ্যবাধকতা নেই। কার্নেল যদি কোনও প্রক্রিয়াটির জন্য একটি সংকেত উত্পন্ন করে এবং সেই সংকেতটি তার ডিফল্ট আচরণে রেখে দেওয়া হয়, কার্নেলটি কেবল এগিয়ে যাবে এবং ডিফল্ট যা কিছু করবে তা প্রক্রিয়াটিকে বিরক্ত করবে না। বেশিরভাগ সিগন্যালের ডিফল্ট আচরণগুলি হয় "কিছুই না করে" বা "এই প্রক্রিয়াটি শেষ করে এবং সম্ভবত একটি কোর ডাম্পও উত্পাদন করে।" SIGSEGV
পরের এক।
সুতরাং, পুনরুদ্ধার করার জন্য, আমাদের একটি প্রক্রিয়া রয়েছে যা মেমরির সুরক্ষা নিয়মগুলিকে ভেঙে দেয়। সিপিইউ প্রক্রিয়াটি স্থগিত করেছে এবং একটি সিঙ্ক্রোনাস বাধা তৈরি করেছে। কার্নেল ক্ষেত্রের মধ্যে ফেলেছিল এবং SIGSEGV
প্রক্রিয়াটির জন্য একটি সংকেত জেনারেট করে। প্রক্রিয়াকে হয়নি জেনে নিই না জন্য একটি সংকেত হ্যান্ডলার সেট আপ SIGSEGV
, তাই কার্নেল ডিফল্ট আচরণ, প্রক্রিয়া বিনষ্ট যা আউট বহন করে। এটি _exit
সিস্টেম কলের মতো একই প্রভাব ফেলে : খোলা ফাইলগুলি বন্ধ থাকে, মেমরিটি হ্রাস করা হয় না ইত্যাদি etc.
এই অবধি অবধি কোনও মানুষ কোনও বার্তা মুদ্রণ করতে পারেনি এবং শেলটি (বা আরও সাধারণভাবে, প্রক্রিয়াটির মূল প্রক্রিয়া যা সবে শেষ হয়ে গেছে) মোটেই জড়িত হয়নি। SIGSEGV
প্রক্রিয়া যা নিয়ম ভেঙে যায় না তার পিতা বা মাতা। পরবর্তী ক্রমানুসারে পদক্ষেপ, যদিও, পিতা বা মাতা প্রক্রিয়া যে তার সন্তান বন্ধ করা হয়েছে অবহিত হয়। এই বিভিন্নরূপে, যার মধ্যে সবচেয়ে সহজ যখন পিতা বা মাতা ইতিমধ্যে এই বিজ্ঞপ্তির জন্য অপেক্ষা করছে, এক ব্যবহারে ঘটতে পারে wait
সিস্টেম কল ( wait
, waitpid
, wait4
, ইত্যাদি)। সেক্ষেত্রে কার্নেলটি কেবলমাত্র সেই সিস্টেম কলটি ফিরে আসবে এবং প্রস্থান প্রক্রিয়াটিকে একটি প্রস্থান স্থিতি নামক একটি কোড নম্বর দিয়ে সরবরাহ করবে parent। 7 প্রস্থান স্থিতি সন্তানের প্রক্রিয়াটি কেন সমাপ্ত হয়েছিল তা পিতামাতাকে অবহিত করে ; এই ক্ষেত্রে, এটি শিখবে যে একটি SIGSEGV
সংকেতের ডিফল্ট আচরণের কারণে শিশুটিকে সমাপ্ত করা হয়েছিল ।
অভিভাবক প্রক্রিয়া তারপরে একটি বার্তা প্রিন্ট করে ইভেন্টটিকে কোনও মানুষের কাছে রিপোর্ট করতে পারে; শেল প্রোগ্রামগুলি প্রায়শই এটি করে। তোমার crsh
যে কাজ করতে কোড অন্তর্ভুক্ত করে না, কিন্তু তবুও এটি ঘটে, কারণ সি গ্রন্থাগার রুটিন system
একটি পূর্ণ-বৈশিষ্ট্যযুক্ত শেল, রান /bin/sh
, "ফণা অধীন"। crsh
এই দৃশ্যে দাদু বাবা ; অভিভাবক-প্রক্রিয়া বিজ্ঞপ্তি দ্বারা ক্ষেত্রযুক্ত /bin/sh
, যা এটির স্বাভাবিক বার্তা প্রিন্ট করে। তারপরে /bin/sh
নিজেই বের হয়ে যায়, কারণ এর আরও কিছু করার নেই এবং সি লাইব্রেরির প্রয়োগটি সেই প্রস্থান বিজ্ঞপ্তিটি system
গ্রহণ করে । এর কোডের রিটার্ন মানটি পরীক্ষা করে আপনি এই কোডটিতে প্রস্থান বিজ্ঞপ্তিটি দেখতে পাচ্ছেনsystem
; তবে এটি আপনাকে বলবে না যে নাতি-নাতনি প্রক্রিয়াটি সেগফল্টে মারা গিয়েছিল, কারণ এটি মধ্যবর্তী শেল প্রক্রিয়া দ্বারা গ্রাস করা হয়েছিল।
পাদটিকা
কিছু অপারেটিং সিস্টেম কার্নেলের অংশ হিসাবে ডিভাইস ড্রাইভারগুলি প্রয়োগ করে না ; যাইহোক, সমস্ত বিঘ্নিত হ্যান্ডলারের এখনও কার্নেলের অংশ হতে হবে এবং মেমোরি সুরক্ষা কনফিগার করে এমন কোডটিও রয়েছে কারণ হার্ডওয়্যার কার্নেল ছাড়া আর কিছু করার অনুমতি দেয় না ।
"হাইপারভাইজার" বা "ভার্চুয়াল মেশিন ম্যানেজার" নামে একটি প্রোগ্রাম থাকতে পারে যা কার্নেলের চেয়ে আরও বেশি সুবিধাজনক, তবে এই উত্তরের উদ্দেশ্যে এটি হার্ডওয়ারের অংশ হিসাবে বিবেচনা করা যেতে পারে ।
কার্নেল একটি হল প্রোগ্রাম , কিন্তু এটা না একটি প্রক্রিয়া; এটি আরও একটি লাইব্রেরির মতো। সমস্ত প্রক্রিয়াগুলি নিজের কোড ছাড়াও সময়ে সময়ে কার্নেলের কোডের অংশগুলি কার্যকর করে। অনেকগুলি "কর্নেল থ্রেড" থাকতে পারে যা কেবল কার্নেল কোড চালায়, তবে তারা আমাদের এখানে উদ্বিগ্ন করে না।
ইউনিক্সের বাস্তবায়ন হিসাবে বিবেচনা করা যায় না এমন একমাত্র ওএস আপনাকে সম্ভবত মোকাবেলা করতে হবে যা অবশ্যই উইন্ডোজ। এটি এই পরিস্থিতিতে সংকেত ব্যবহার করে না। (প্রকৃতপক্ষে, এটা না আছে সংকেত; Windows এ <signal.h>
ইন্টারফেস সম্পূর্ণরূপে C লাইব্রেরি দ্বারা ছদ্ম হয়।) এটা কিছু "বলা ব্যবহার কাঠামোগত ব্যতিক্রম হ্যান্ডলিং " এর পরিবর্তে।
কিছু স্মৃতি-সুরক্ষা লঙ্ঘন এর SIGBUS
পরিবর্তে ("বাসের ত্রুটি") উত্পন্ন করে SIGSEGV
। দুজনের মধ্যে লাইনটি অপ্রকাশিত এবং সিস্টেম থেকে সিস্টেমের মধ্যে পরিবর্তিত হয়। যদি আপনি এমন কোনও প্রোগ্রাম লিখেছেন যা হ্যান্ডলারটি সংজ্ঞায়িত করে SIGSEGV
, তবে সম্ভবত এটির জন্য একই হ্যান্ডলারের সংজ্ঞা দেওয়া ভাল ধারণা SIGBUS
।
"সেগমেন্টেশন ফল্ট" কম্পিউটার দৌড়ে এক দ্বারা মেমরি সুরক্ষা লঙ্ঘনের জন্য উত্পন্ন বিঘ্ন নাম ছিলো মূল ইউনিক্স , সম্ভবত পিডিপি -11 । " সেগমেন্টেশন " এক প্রকারের মেমরি সুরক্ষা, তবে আজকাল "সেগমেন্টেশন ফল্ট " শব্দটি যেকোন ধরণের মেমরি সুরক্ষা লঙ্ঘনকে উদারভাবে বোঝায়।
অন্য যে কোনও উপায়ে পিতামাতার প্রক্রিয়াটি কোনও সন্তানের সমাপ্ত হওয়ার বিষয়ে অবহিত হতে পারে, পিতামাতার সাথে কথা বলা wait
এবং প্রস্থান স্থিতি অর্জন সমাপ্ত হয় । এটি ঠিক যে আগে অন্য কিছু ঘটে।
crsh
এই ধরণের পরীক্ষার জন্য একটি দুর্দান্ত ধারণা। আমাদের সকলকে এটি সম্পর্কে এবং এর পেছনের ধারণাটি জানানোর জন্য ধন্যবাদ।