লিনাক্সে কীভাবে একটি বিঘ্নিত ব্যবস্থা নেওয়া হয়?


35

আমি কেবল জানি যে Interruptএটি hardware signal assertionএকটি প্রসেসরের পিনের কারণে ঘটে। তবে আমি জানতে চাই যে লিনাক্স ওএস কীভাবে এটি পরিচালনা করে।
কোনও বাধাপ্রাপ্ত হওয়ার সাথে সাথে ঘটে যাওয়া সমস্ত জিনিসগুলি কী?


tldp.org/LDP/tlk/dd/interrupts.html আপনার জিজ্ঞাসা করা প্রশ্ন সম্পর্কে সমস্ত কিছু ব্যাখ্যা করে
জন

উত্তর:


40

নিম্ন-স্তরের প্রক্রিয়াজাতকরণের এখানে একটি উচ্চ-স্তরের দর্শন। আমি একটি সাধারণ টিপিক্যাল আর্কিটেকচারের বর্ণনা দিচ্ছি, প্রকৃত আর্কিটেকচার আরও জটিল হতে পারে বা এমনভাবে আলাদা হতে পারে যা বিশদের এই স্তরের ক্ষেত্রে গুরুত্বপূর্ণ নয়।

যখন কোনও বাধা ঘটে তখন প্রসেসরটি দেখে মনে হয় যে বাধা মুখোশযুক্ত। যদি তারা থাকে তবে তারা খালি করা না হওয়া পর্যন্ত কিছুই হয় না। যখন বিঘ্নগুলি আনমস্ক করা হয়ে থাকে, যদি কোনও মুলতুবি বাধা থাকে, প্রসেসর একটি বাছাই করে।

তারপরে প্রসেসর মেমরিতে একটি নির্দিষ্ট ঠিকানার শাখা করে বাধা কার্যকর করে। এই ঠিকানার কোডটিকে ইন্টারপ্রেট হ্যান্ডলার বলা হয় । প্রসেসরটি যখন সেখানে শাখা করে, এটি বিঘ্নগুলি মাস্ক করে (সুতরাং বিঘ্নিত হ্যান্ডলারের একচেটিয়া নিয়ন্ত্রণ থাকে) এবং কিছু জায়গায় কিছু রেজিস্টরের সামগ্রী সংরক্ষণ করে (সাধারণত অন্যান্য রেজিস্টারগুলি)।

বাধাপ্রাপ্ত হ্যান্ডলার যা করা উচিত তা করে, সাধারণত পেরিফেরিয়ালের সাথে যোগাযোগ করে যা ডেটা প্রেরণ বা গ্রহণ করতে বাধা দেয়। যদি বাধাটি টাইমার দ্বারা উত্থাপিত হয়, হ্যান্ডলারটি ওএস সময়সূচীটিকে ট্রিগার করতে পারে, অন্য কোনও থ্রেডে স্যুইচ করতে। হ্যান্ডলার যখন সম্পাদন শেষ করে, তখন এটি একটি বিশেষ রিটার্ন-বিঘ্নিত নির্দেশনা কার্যকর করে যা সংরক্ষিত রেজিস্টারগুলিকে পুনঃস্থাপন করে এবং বিযুক্তি বিঘ্নগুলি নিষ্ক্রিয় করে।

বাধাপ্রাপ্ত হ্যান্ডলারটি দ্রুত চালাতে হবে, কারণ এটি অন্য কোনও বাধা দৌড়ানো থেকে আটকাচ্ছে। লিনাক্স কার্নেলে, বিঘ্নিত প্রক্রিয়াজাতকরণ দুটি ভাগে বিভক্ত:

  • "উপরের অর্ধেক" হ'ল বাধা হ্যান্ডলার ler এটি ন্যূনতম প্রয়োজনীয়টি করে, সাধারণত হার্ডওয়্যারের সাথে যোগাযোগ করে এবং কার্নেল মেমরির কোথাও একটি পতাকা সেট করে।
  • "নীচের অর্ধেক" অন্য যে কোনও প্রয়োজনীয় প্রক্রিয়াজাতকরণ করে, উদাহরণস্বরূপ প্রসেস মেমোরিতে ডেটা অনুলিপি করা, কার্নেল ডেটা স্ট্রাকচার আপডেট করা ইত্যাদি It এটি সিস্টেমের অন্য কোনও অংশের জন্য অপেক্ষা করতে এমনকি সময় অবরুদ্ধ করতে পারে কারণ এটি বিঘ্ন সক্ষম হয়ে চালিত হয়।

এই বিষয়ে যথারীতি, আরও তথ্যের জন্য, লিনাক্স ডিভাইস ড্রাইভারগুলি পড়ুন ; দশম অধ্যায়টি বাধা সম্পর্কে।


22

গিলস ইতিমধ্যে একটি বিঘ্নিত হওয়ার সাধারণ ক্ষেত্রে বর্ণনা করেছেন, নিম্নলিখিতটি ইন্টেল আর্কিটেকচারে লিনাক্স ২.6 এর জন্য বিশেষত প্রযোজ্য (এর অংশটিও ইন্টেলের স্পেসিফিকেশনের উপর ভিত্তি করে)।

একটি বাধা হ'ল এমন একটি ইভেন্ট যা প্রসেসরের দ্বারা সম্পাদিত নির্দেশাবলীর অনুক্রমকে পরিবর্তন করে।
দুটি ধরণের বাধা রয়েছে:

  • নির্দেশাবলী প্রক্রিয়া করার সময় সিপিইউ দ্বারা উত্পাদিত সিঙ্ক্রোনাস বিঘ্ন (ব্যতিক্রম)
  • অন্যান্য হার্ডওয়্যার ডিভাইস দ্বারা জারি করা অ্যাসিঙ্ক্রোনাস ইন্টারপট (ইন্টারপট)

ব্যতিক্রম প্রোগ্রামিং ত্রুটির কারণে ঘটে (ফী বিভক্ত ত্রুটি , পৃষ্ঠা ফল্ট , ওভারফ্লো ) যা অবশ্যই কার্নেল দ্বারা পরিচালিত হবে। তিনি প্রোগ্রামটিতে একটি সংকেত প্রেরণ করেন এবং ত্রুটিটি থেকে পুনরুদ্ধার করার চেষ্টা করেন।

নিম্নলিখিত দুটি ব্যতিক্রম শ্রেণিবদ্ধ করা হয়েছে:

  • অসাধারণ অবস্থা শনাক্ত করার সময় সিপিইউ দ্বারা উত্পাদিত প্রসেসরের সনাক্তকরণ ব্যতিক্রম ; তিনটি গ্রুপে বিভক্ত: ফল্টগুলি সাধারণত সংশোধন করা যায়, ফাঁদগুলি একটি মৃত্যুদন্ড কার্যকর করার রিপোর্ট করে, অ্যাবোর্টস গুরুতর ত্রুটি।
  • প্রোগ্রামার দ্বারা অনুরোধ করা প্রোগ্রামযুক্ত ব্যতিক্রম , ফাঁদের মতো হ্যান্ডেল করা।

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

বাধা হ্যান্ডল করা একটি সংবেদনশীল কাজ:

  • বাধা যে কোনও সময় ঘটতে পারে, কার্নেলটি যত তাড়াতাড়ি সম্ভব উপায় থেকে সরিয়ে নেওয়ার চেষ্টা করে
  • একটি বাধা অন্য বাধা দ্বারা বাধা দেওয়া যেতে পারে
  • কার্নেলের মধ্যে এমন অঞ্চল রয়েছে যা অবশ্যই বাধা দেওয়া উচিত নয়

দুটি পৃথক বাধা স্তর সংজ্ঞায়িত করা হয়:

  • আই / ও ডিভাইস দ্বারা জারি করা মাস্কেবল বাধা ; মুখোশযুক্ত বা আনমস্কড দুটি অবস্থায় থাকতে পারে। কেবল আনমস্কড বিঘ্নিত প্রক্রিয়াজাত হচ্ছে।
  • ননমাস্কেবল বাধা ; সমালোচনামূলক ত্রুটি (ফাই হার্ডওয়্যার ব্যর্থতা); সর্বদা সিপিইউ দ্বারা প্রক্রিয়াজাত করা হয়।

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

একটি বিঘ্নিত বা ব্যতিক্রম এবং এটি পরিচালনা করার মধ্যবর্তী পদক্ষেপটি হ'ল বিঘ্নিত বর্ণনাকারী সারণী (আইডিটি)। এই টেবিলটি প্রতিটি বিঘ্নিত বা ব্যতিক্রম ভেক্টরকে (একটি সংখ্যা) নির্দিষ্ট হ্যান্ডলারের সাথে সংযুক্ত করে ( ফাংশন দ্বারা ত্রুটি বিভক্ত হ্যান্ডল হয়ে যায় divide_error())।

আইডিটির মাধ্যমে, কার্নেল সঠিকভাবে জানে যে কীভাবে ঘটেছিল বাধা বা ব্যতিক্রম পরিচালনা করতে হবে।


সুতরাং, যখন কোনও বাধা ঘটে তখন কার্নেলটি কী করে?

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

"(এ) পিআইসি থেকে আইআরকিউ থাকলে প্রতিটি নির্দেশনার পরে সিপিইউ চেক করে" আপনি কি স্পষ্ট করতে পারেন ? এটা ঠিক কীভাবে ঘটে? এটি VIPপতাকা নিবন্ধে -ফ্ল্যাজ সম্পর্কিত বা যা কিছু? অগ্রিম ধন্যবাদ
red0ct

7

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

প্রসেসর একটি বাধা অনুরোধ পেলে কী ঘটে? প্রথমত, সিপিইউ স্বয়ংক্রিয়ভাবে বিঘ্নিত পতাকাটি পুনরায় সেট করে বাধা নিষ্ক্রিয় করে। বাধা হ্যান্ডলিং শেষ হয়ে গেলে এগুলি আবার সক্ষম করা হবে। একই সময়ে সিপিইউ ব্যবহারকারী মোড থেকে কার্নেল মোডে সিপিইউ স্যুইচ করার জন্য প্রয়োজনীয় পরিমাণের ন্যূনতম পরিমাণকে এমনভাবে তৈরি করে যে এটি বিঘ্নিত কোডটির প্রয়োগ পুনরায় শুরু করতে দেয়। সিপিইউ লিনাক্স কার্নেল দ্বারা ভরাট বিশেষ সিপিইউ নিয়ন্ত্রণ কাঠামো নিয়ে পরামর্শ নিয়েছে যাতে কোন কোডটি পাস হবে সেই কোডের একটি ঠিকানা সন্ধান করতে। এই ঠিকানাটি হ'ল বিযুক্ত হ্যান্ডলারের প্রথম নির্দেশিকার ঠিকানা, যা লিনাক্স কার্নেলের একটি অংশ।

বিঘ্নিত হ্যান্ডলিংয়ের প্রথম পদক্ষেপ হিসাবে কার্নেল সিস্টেমে কী ধরণের ঘটনা ঘটেছে তা সনাক্ত করতে প্রাপ্ত বিঘ্নিত ভেক্টরকে সনাক্ত করে। বিঘ্নিত ভেক্টর নির্ধারণ করে যে লিনাক্স এটি পরিচালনা করতে কী পদক্ষেপ গ্রহণ করবে। দ্বিতীয় পদক্ষেপ হিসাবে লিনাক্স সিপিইউর বাকী রেজিস্টারগুলি সংরক্ষণ করে (যা স্বয়ংক্রিয়ভাবে সিপিইউ দ্বারা সংরক্ষণ করা হয়নি) এবং কোনটি বাধাগ্রস্ত হওয়া প্রোগ্রাম দ্বারা সম্ভাব্যভাবে ব্যবহার করা যেতে পারে। এটি অত্যন্ত গুরুত্বপূর্ণ ক্রিয়া, কারণ এটি লিনাক্সকে বাধা প্রোগ্রামের বিষয়ে স্বচ্ছভাবে বিঘ্নগুলি পরিচালনা করতে দেয় allows তৃতীয় ধাপ হিসাবে, লিনাক্স কার্নেল মোডে স্যুইচ করে কার্নেল পরিবেশ স্থাপন করে এবং এর জন্য প্রয়োজনীয় সিপিইউ স্থিতি স্থাপন করে। এবং পরিশেষে, ভেক্টর নির্ভরশীল বাধা হ্যান্ডলারকে ডাকা হয়। (আপনি আর্ক \ x86 \ কার্নেল \ এন্ট্রি_32 এ BUILD_INTERRUPT3 ম্যাক্রো দেখতে পারেন। X86 আর্কিটেকচার সম্পর্কিত উদাহরণের অতিরিক্ত বিবরণ দখল করতে এস) পেরিফেরিয়াল ডিভাইসের ক্ষেত্রে এটি একটি do_IRQ () রুটিন। (খিলানটি \ x86 \ কার্নেল \ irq.c দেখুন)

ভেক্টর নির্ভরশীল বাধা হ্যান্ডলার সাধারণত ইরাক_এন্টার () এবং ইরক_এক্সিট () এর কল দিয়ে মোড়ানো থাকে। এই ফাংশনগুলির একটি জোড়ের মধ্যে সংযুক্ত কোড অঞ্চলটি এ জাতীয় যে কোনও অঞ্চলের ক্ষেত্রে পারমাণবিক এবং জোড় ক্লিয়ার / স্টির জোড়ের ক্ষেত্রেও পারমাণবিক। ইরাক_এন্টার () এবং ইরক_এক্সিট () এছাড়াও বাধা হ্যান্ডলিং সম্পর্কিত কিছু পরিসংখ্যান ক্যাপচার করে। অবশেষে, কার্নেলটি ইন্টারেক্টর প্রাপ্ত ভেক্টরের জন্য নির্ধারিত আইআরসি নম্বর এবং হ্যান্ডেল_িরক () (খিলান \ x86 \ কার্নেল \ ইরক_32.c থেকে) কল করে ভেক্টর_িরক টেবিলটি সন্ধান করে।

এই মুহুর্তে লিনাক্সে বিঘ্নিত হ্যান্ডলিংয়ের সাধারণ অংশটি শেষ হয়, কারণ কার্নেলটি ডিআরসি ড্রাইভার দ্বারা ইনস্টল হওয়া ডিভাইস নির্ভর ব্যবস্থাপত্র হ্যান্ডলার রুটিনটিকে ইরক বর্ণনাকারীর অংশ হিসাবে দেখায় এবং অনুরোধ করে। যদি এই ধরনের হ্যান্ডলারটি ড্রাইভার দ্বারা ইনস্টল না করা থাকে তবে কার্নেল কেবল বাধা নিয়ন্ত্রকের মধ্যে বাধা স্বীকার করে এবং সাধারণ বিঘ্নিত হ্যান্ডলার থেকে প্রস্থান করতে যায়।

বাধাপ্রাপ্ত হ্যান্ডলিংয়ের সমাপ্তির পরে কার্নেল প্রোগ্রামটির অবস্থা পুনরুদ্ধার করে যা আগে বাধাগ্রস্ত হয়েছিল এবং এই প্রোগ্রামটির প্রয়োগ পুনরায় শুরু করে।


CPU consults with special CPU control structures filled by Linux kernel to find an address of code to which control will be passed.হ্যাঁ! আমি ভাবছি যে এই বিশেষ নিয়ন্ত্রণ কাঠামোগুলি কী ...
অটোমেটন

3

তত্ত্বের দিক থেকে, প্রায় সমস্ত কিছু ব্যাখ্যা করা হয়েছে। তবে আপনি যদি কার্নেল বিঘ্নিত হ্যান্ডলিং কোড কাঠামোর বিষয়ে ব্যাখ্যা খুঁজছেন তবে নীচের লিঙ্কটি আপনার উচিত: কার্নেল বিঘ্নিত হ্যান্ডলিংয়ের ভিতরে একটি কোড ওয়াক

এবং যদি আপনি এখনও বাধা এবং বাধা হ্যান্ডলারগুলি সম্পর্কে তত্ত্বটি খুঁজছেন তবে আমি এটি পড়ার পরামর্শ দিচ্ছি: বাধা এবং বাধা হ্যান্ডলারগুলি বোঝা

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.