প্রসেসর একটি বিঘ্নের পরে কার্নেল কোডটি কীভাবে খুঁজে পাবে?


13

যখন কোনও বাধা ঘটে তখন প্রসেসরটি বর্তমান প্রক্রিয়াটি প্রিম্পেট করে এবং বিঘ্নটি পরিচালনা করতে কার্নেল কোডটি কল করে। প্রসেসর কীভাবে জানতে পারে যে কার্নেলটি কোথায় প্রবেশ করবে?

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

উত্তর:


13

প্রারম্ভকালে, কার্নেল একটি বিঘ্নিত ভেক্টর টেবিল শুরু করবে ( x86 এ একটি বিঘ্নিত বর্ণনাকারী টেবিল বা আইডিটি বলে) যা প্রতিটি লাইনের জন্য একটি বাধা হ্যান্ডলারের দিকে নির্দেশ করে।

80286 এর আগে, আইডিটি সর্বদা একটি নির্দিষ্ট ঠিকানায় সংরক্ষণ করা হত; 80286 দিয়ে শুরু করে, আইডিটি LIDTনির্দেশ ব্যবহার করে লোড করা হয় ।

বাধা ভেক্টর টেবিলগুলি বিঘ্নিত লাইনে প্রতি একক হ্যান্ডলারকে নির্দেশ করে; বলা হচ্ছে যে, একটি কার্নেল একটি বাধা হ্যান্ডলার সরবরাহ করতে পারে যা বেশ কয়েকটি অন্যান্য বিঘ্নিত রুটিন চালায় বা একটি একক হ্যান্ডলার সরবরাহ করতে পারে যা কিছু বা সমস্ত বাধা interেকে রাখে। লিনাক্স একটি জেনেরিক বিঘ্নিত হ্যান্ডলার সরবরাহ করে এই কাজগুলি করে যা কোনটি বাধাগুলি রেখা বলা হয়েছিল তা নির্ধারণ করে এবং কল করার জন্য উপযুক্ত প্রবাহের হ্যান্ডলারকে সন্ধান করে।


1
প্রসেসরটি আইডিটির সূচক হিসাবে বাধা লাইনটি ব্যবহার করে, পিসিতে এন্ট্রি রাখে এবং কার্যকর করতে শুরু করে? তবে এমন কোনও জেনেরিক ফাংশন নেই যা সমস্ত বাধা হ্যান্ডলারের আগে চলে ? লিনাক্সের জন্য এটি do_IRQ () হবে। প্রতিটি আইডিটি এন্ট্রি বাধা লাইন কোনও ব্যাপার না, এটি কি এই ফাংশনটি?
ফিলিপ মেরি

@ ফিলিপমুরি হ্যাঁ পূর্ববর্তী নির্বাহী কোডে ফিরে আসার পূর্বে কার্নেলটি প্রকৃতভাবে বাধা হ্যান্ডেল করার জন্য তার নিজস্ব বিঘ্নিত হ্যান্ডলারের সেটগুলি ব্যবহার করে (যার মধ্যে প্রতি লাইনে একাধিক থাকতে পারে)।
অ্যাডাম মারাস 21

ঠিক আছে, সুতরাং প্রকৃতপক্ষে দুটি ধরণের বিঘ্নিত হ্যান্ডলার রয়েছে: প্রসেসর কল করে (সর্বদা do_IRQ ()), এবং যেগুলি কার্নেল কল করে (যাদের আমি অনুরোধ_িরক () এর মাধ্যমে নিবন্ধিত করেছি)। আপনি কি আপনার উত্তরে এটি যুক্ত করতে পারেন? আমি মনে করি তবে আমি এটি গ্রহণ করব :) অনেক অনেক ধন্যবাদ
ফিলিপ মারি

1
@ ফিলিপমুড়ি আমি লিনাক্স কীভাবে বিঘ্নিত (এবং কার্নেল বিকাশকারীরা সেই সিস্টেমে কীভাবে ব্যবহার করে) পরিচালনা করে সে সম্পর্কে আমি বিশেষজ্ঞ নই, তবে কার্নেলগুলি কীভাবে নিজের আইএসআর পরিচালনা করতে পারে সে সম্পর্কে আরও বিস্তৃত অর্থে আমি আরও কিছু তথ্য যুক্ত করেছি।
অ্যাডাম মারাস 21

12

হ্যাঁ, এখানে একটি পূর্বনির্ধারিত জায়গা রয়েছে যাতে কোডের ঠিকানাতে ঝাঁপ দেওয়ার জন্য রয়েছে: একটি বাধা ভেক্টর । প্রসেসরের উপর নির্ভর করে, এটি শারীরিক স্মৃতিতে একটি নির্দিষ্ট অবস্থান (8088), ভার্চুয়াল মেমরির একটি নির্দিষ্ট অবস্থান, একটি প্রসেসরের রেজিস্টার, একটি রেজিস্টার দ্বারা নির্দেশিত মেমরির একটি অবস্থান (এআরএম, 386),…

বিশদগুলি বিভিন্ন প্রসেসরের উপর পরিবর্তিত হয়, তবে প্রসেসরের একটি বিঘ্নিত হ্যান্ডেল করার প্রধান সাধারণ উপাদানগুলি হ'ল:

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

1

অন্য দুটি উত্তর (লেখার সময়) বাধা এবং আইডিটি সম্পর্কে কথা বলে। এটি সঠিক, তবে, আধুনিক ইন্টেল-এস্কু সিপিইউতে, কার্নেলটিতে কল করার জন্য তিনটি উপায়ের চেয়ে কম কিছু নেই।

পদ্ধতি # 1: বাধা।

এটি উপরে ব্যাখ্যা করা হয়েছে। আপনি বিঘ্নিত বর্ণনাকারী টেবিল / বিঘ্নিত ভেক্টরটিতে একটি এন্ট্রি সেটআপ করেন এবং তারপরে কার্নেল প্রবেশের জন্য একটি সফ্টওয়্যার ইন্টারপেট কার্যকর করে।

এই পদ্ধতির প্রধান সুবিধাটি হ'ল একটি সাধারণ কার্নেলটি যে কোনওভাবেই বাধা হ্যান্ডেল করতে সক্ষম হওয়া প্রয়োজন, এবং এটি প্রত্নতাত্ত্বিক হার্ডওয়্যারে কাজ করে।

পদ্ধতি # 2: কল গেটস।

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

আমি বিশ্বাস করি না যে লিনাক্স কখনও কল কল ব্যবহার করেছিল, তবে উইন্ডোজ 95 করেছে। Win95 কার্নেল পরিষেবাদি ( krnl386.exeএবং kernel.dll) আসলে ব্যবহারকারীর মোডে ছুটেছিল (রিং 3)। সর্বোচ্চ সুবিধা স্তর (রিং 0) কেবলমাত্র ড্রাইভার এবং একটি মাইক্রোকার্নের জন্য ব্যবহৃত হত যা কেবলমাত্র প্রক্রিয়া পরিবর্তন করতে পারে। কল গেট ব্যবহার করে ড্রাইভারগুলিতে কল করা হত। এটি লেগ্যাসি 16-বিট কোড (যার মধ্যে অনেক কিছুই ছিল!) Win95 ড্রাইভারকে কেবল একটি স্ট্যান্ডার্ড দূরবর্তী কল ব্যবহার করার অনুমতি দেয়, যেমন তারা সবসময় করেছিল।

বৈশ্বিক বর্ণনাকারী টেবিলের অপর্যাপ্ত সুরক্ষা ছিল বেশ কয়েকটি উইন্ডোজ 95 শোষণের কারণ, যা মেমরির মাধ্যমে লিখে তাদের নিজস্ব কল গেট ইনস্টল করতে সক্ষম হয়েছিল।

পদ্ধতি # 3: SYSCALL / SYSRET এবং SYSENTER / SYSEXIT

এগুলি দুটি নির্দেশাবলীর স্বতন্ত্রভাবে এএমডি এবং ইনটেল দ্বারা উদ্ভাবিত, তবে তারা মূলত একই জিনিসটি করে। SYSCALL / SYSRET প্রথমে এসেছিল এবং এটি কেবলমাত্র AMD ছিল, SYSENTER / SYSEXIT ছিল Intel, তবে AMD এটি এখন প্রয়োগ করে। সুতরাং আমি SYSENTER / SYSEXIT বর্ণনা করতে যাচ্ছি।

কল গেটগুলির বিপরীতে, SYSENTER কেবল 0 রিংয়ে স্থানান্তর করতে ব্যবহৃত হতে পারে এবং কেবলমাত্র একটি জায়গায় স্থানান্তর করতে পারে। তবে, এটি অত্যন্ত স্বল্প-বিলম্বিত হওয়ার সুবিধা রয়েছে কারণ কোনও কলের বিপরীতে বা বিঘ্নিত হয়ে এটি স্ট্যাকটি স্পর্শ করে না।

স্থানান্তর অবস্থানটি তিনটি মডেল-নির্দিষ্ট রেজিস্টার ব্যবহার করে সেট আপ করা হয়: সেগমেন্টের তথ্যের জন্য একটি এবং কার্নেল কোডের নির্দেশ পয়েন্টার এবং স্ট্যাক পয়েন্টারটির জন্য একটি করে। স্ট্যাকের উপরে কিছুই "ধাক্কা" দেওয়া হয়নি, ব্যবহারকারী মোড কোডটি কার্নেলটি যেখানে রিটার্ন নির্দেশিকা নির্দেশক এবং রেজিস্টারে স্ট্যাক পয়েন্টারটি পাস করে ফিরে যেতে হবে তা জানানোর জন্য দায়বদ্ধ। কার্নেল স্ট্যাক পয়েন্টারটি পুনরুদ্ধার করার জন্য দায়ী এবং SYSEXIT নির্দেশ নির্দেশ পয়েন্টারটি পুনরুদ্ধার করে।

SYSENTER এবং SYSEXIT নির্দেশাবলী সম্পর্কে আরও তথ্য।

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