আপনি যখন কোনও প্রোগ্রাম খোলেন তখন কি কোনও অপারেটিং সিস্টেম তার নিজস্ব মেশিন কোড ইনজেকশন দেয়?


32

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

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

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


7
দেখুন: প্রসঙ্গের স্যুইচ ওএস অ্যাপ্লিকেশনটিতে একটি প্রসঙ্গ সুইচ করে। অ্যাপ্লিকেশনটি তখন ওএস পরিষেবাদির জন্য অনুরোধ করতে পারে যা ওএস-এ কোনও প্রসঙ্গে কাজ করে। অ্যাপ্লিকেশনটি শেষ হয়ে গেলে প্রসঙ্গে ওএসে ফিরে যায়।
গাই কোডার

4
"সিস্কেল" দেখুন।
রাফেল


1
যদি মন্তব্য এবং উত্তরগুলি আপনার বোঝার বা সন্তুষ্টির জন্য আপনার প্রশ্নের উত্তর না দেয়, তবে দয়া করে একটি মন্তব্য হিসাবে আরও তথ্যের জন্য জিজ্ঞাসা করুন এবং আপনি কী ভাবছেন বা কোথায় হারিয়েছেন, বা কীভাবে আপনাকে আরও বিশদ বিবরণ প্রয়োজন তা ব্যাখ্যা করুন।
গাই কোডার

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

উত্তর:


35

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

  1. এটি সময় সাশ্রয়ী হবে, কারণ ওএসকে তার পরিবর্তনগুলি সম্পাদন করে পুরো এক্সিকিউটেবলের মাধ্যমে স্ক্যান করতে হবে। সাধারণত, এক্সিকিউটেবলের কিছু অংশ কেবল প্রয়োজন অনুযায়ী লোড হয়। এছাড়াও, সন্নিবেশ করা ব্যয়বহুল কারণ আপনাকে প্রচুর পরিমাণে জিনিসকে বাইরে সরিয়ে নিতে হবে।

  2. থামার সমস্যার অঘোষিততার কারণে আপনার "ওএস এ ফিরে যান" নির্দেশাবলী কোথায় সন্নিবেশ করা যায় তা জানা অসম্ভব। উদাহরণস্বরূপ, কোডটিতে যদি এর মতো কিছু অন্তর্ভুক্ত থাকে তবে while (true) {i++;}আপনাকে অবশ্যই সেই লুপের ভিতরে একটি হুক toোকানো দরকার তবে লুপের শর্তটি ( trueএখানে) নির্বিচারে জটিল হতে পারে তাই আপনি এটি স্থির করতে পারবেন না যে এটি কতক্ষণ লুপ করবে। অন্যদিকে, প্রতিটি লুপে হুকগুলি veryোকানো খুব অকার্যকর হবে : উদাহরণস্বরূপ, ওএসে ফিরে ফিরে ঝাঁপ for (i=0; i<3; i++) {j=j+i;}দেওয়া প্রক্রিয়াটি অনেকটা ধীর করে দেবে। এবং, একই কারণে, আপনি এগুলি একা রেখে শর্ট লুপ সনাক্ত করতে পারবেন না।

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

  4. এটি যেকোন অ্যান্টি-ভাইরাস সিস্টেমের সাথে আনন্দিত হেল্প খেলবে, কারণ এটি ভাইরাস কোডকেও বদলে দেবে এবং আপনার সমস্ত চেকসামকে উপভোগ করবে।

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

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

প্রক্রিয়াগুলি থেকে ওএস পুনরায় নিয়ন্ত্রণের তিনটি প্রধান উপায় রয়েছে।

  1. সমবায় (বা অপসারণমূলক) সিস্টেমে এমন একটি yieldফাংশন রয়েছে যা কোনও প্রক্রিয়া ওএসকে নিয়ন্ত্রণ ফিরিয়ে দিতে কল করতে পারে। অবশ্যই এটি যদি আপনার একমাত্র প্রক্রিয়া হয় তবে আপনি সুন্দর আচরণ করার প্রক্রিয়াগুলির উপর নির্ভরশীল এবং ফলস্বরূপ এমন প্রক্রিয়া সিপিইউ শেষ না হওয়া পর্যন্ত হগ করবে।

  2. সমস্যাটি এড়াতে, একটি টাইমার বিঘ্ন ব্যবহৃত হয়। সিপিইউগুলি সিপিইউ প্রয়োগ করে এমন বিভিন্ন ধরণের বিঘ্নের জন্য ওএসকে কলব্যাকগুলি নিবন্ধিত করার অনুমতি দেয়। ওএস টাইমার বিঘ্নের জন্য একটি কলব্যাক নিবন্ধন করতে এই ব্যবস্থাকে ব্যবহার করে যা পর্যায়ক্রমে নিষ্কাশন করা হয়, যা এটি তার নিজস্ব কোড সম্পাদন করতে দেয়।

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


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

3
কিছু ওএসগুলি করে, বেশিরভাগ ওএস কমপক্ষে "লিঙ্কিং" করার কোড সম্পর্কে
গণ্ডগোল

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

1
এই উত্তরে যুক্ত করা; 2 এবং 3 পয়েন্টগুলিতে উল্লিখিত মাল্টিটাস্কিংয়ের স্টাইলটিকে "প্রিপ্রিপটিভ মাল্টিটাস্কিং" বলা হয়, নামটি চলমান প্রক্রিয়াটিকে প্রশমিত করার ওএসের ক্ষমতা বোঝায়। পুরানো অপারেটিং সিস্টেমে প্রায়শই সমবায় মাল্টিটাস্কিং ব্যবহৃত হত; উইন্ডোজটিতে কমপক্ষে প্রিমিটিভ মাল্টিটাস্কিং উইন্ডোজ 95 অবধি চালু করা হয়নি। আমি আজ ব্যবহারে কমপক্ষে একটি শিল্প নিয়ন্ত্রণ ব্যবস্থা পড়েছি যা এখনও উইন্ডোজ 3.1 কেবলমাত্র তার বাস্তব সময়ের সমবায় মাল্টিটাস্কিং আচরণের জন্য ব্যবহার করে।
জেসন সি

3
@ বিআইআইবি আসলে, আপনি ভুল বলেছেন। ডেস্কটপ সিপিইউ প্রায় i486 সাল থেকে কোডটি ক্রমান্বয়ে এবং সিঙ্ক্রোনালি চালায় না। যাইহোক, এমনকি পুরানো সিপিইউগুলিতে এখনও অ্যাসিনক্রোনাস ইনপুট - বাধা ছিল। একটি সিপিইউতে একটি পিনের মতো একটি হার্ডওয়্যার বিঘ্নিত অনুরোধের (আইআরকিউ) কল্পনা করুন - যখন এটি পাওয়া যায় 1, সিপিইউ যা কিছু করে বন্ধ করে দেয় এবং বিঘ্নিত প্রক্রিয়াজাতকরণ শুরু করে (যার মূল অর্থ "রাষ্ট্র সংরক্ষণ এবং স্মৃতিতে কোনও ঠিকানার দিকে ঝাঁপ দাও")। বাধা হ্যান্ডলিং নিজেই হয় না x86বা যে কোনও কোডই নয়, এটি আক্ষরিকভাবে হার্ডওয়ার্ড। জাম্পিংয়ের পরে, এটি আবার (যে কোনও) x86কোড কার্যকর করে। থ্রেডগুলি একটি উপায় উচ্চতর বিমূর্ততা।
লুয়ান

12

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

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

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

মেমরি থেকে, যখন এটি ঘটে অপারেটিং সিস্টেমের কার্নেলটি কোডটি কোথায় ছিল সেভ করতে হবে এবং যখন কার্নেলটি এটি করার দরকার হয় তখন এটি প্রোগ্রামের পূর্বের অবস্থার পুনরুদ্ধার করে। সুতরাং প্রোগ্রামটি এমনকি জানে না যে এটি বাধাগ্রস্ত হয়েছিল।

প্রক্রিয়া দুটি কারণে বাধা টেবিল পরিবর্তন করতে পারে না, প্রথমটি এটি একটি সুরক্ষিত পরিবেশে চলছে তাই এটি যদি কিছু সুরক্ষিত অ্যাসেম্বলি কোড কল করার চেষ্টা করে তবে সিপিইউ আরেকটি বিঘ্ন ঘটায়। দ্বিতীয় কারণটি ভার্চুয়াল মেমরি। বাধা টেবিলের অবস্থানটি বাস্তব মেমরিতে 0x0 থেকে 0x3FF এ থাকে তবে ব্যবহারকারীর প্রক্রিয়াগুলির সাহায্যে সেই অবস্থানটি সাধারণত ম্যাপ করা হয় না এবং মেমপ্লেড মেমরি পড়ার চেষ্টা করা অন্য বাধা সৃষ্টি করে, তাই সুরক্ষিত ফাংশন এবং আসল র‌্যামে লেখার ক্ষমতা ছাড়াই , ব্যবহারকারী প্রক্রিয়া এটি পরিবর্তন করতে পারে না।


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

2
আমি জানি যে বাধা সিপিইউ দ্বারা সংজ্ঞায়িত করা হয়েছে তবে কার্নেল পয়েন্টার সেট আপ করে। আমি সম্ভবত এটি খারাপভাবে ব্যাখ্যা করেছি। আমি আরও ভেবেছিলাম যে লিনাক্স এখনও কার্নেলের সাথে কথা বলার জন্য int 9 ব্যবহার করেছে, তবে এখন আরও ভাল উপায় রয়েছে।
প্রোগ্রামমুদে

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

(এছাড়াও সত্যিকারের মোড বিঘ্নিত টেবিলটি স্থানান্তরযোগ্য - মেমরির প্রথম পৃষ্ঠায় লক করা হয়নি - 8086 সাল থেকে)
জেসন সি

1
এই উত্তরটি একটি সমালোচনা বিশদ মিস করে। একটি বাধা অগ্নিকাণ্ডের সময়, সিপিইউ সরাসরি কার্নেলে স্যুইচ করে না। পরিবর্তে, এটি প্রথমে বিদ্যমান নিবন্ধগুলি সংরক্ষণ করে, তারপরে অন্য স্ট্যাকের দিকে স্যুইচ করে এবং তারপরেই কার্নেলটি বলা হয়। এলোমেলো প্রোগ্রাম থেকে এলোমেলো স্ট্যাকের সাহায্যে কার্নেলকে কল করা একটি খারাপ ধারণা হবে। এছাড়াও, শেষ অংশটি বিভ্রান্তিকর। আনম্যাপড মেমরিটি পড়ার জন্য আপনি কোনও বাধা "চেষ্টা" পাবেন না; এটা সহজ অসম্ভব। আপনি ভার্চুয়াল ঠিকানাগুলি থেকে পড়েন এবং আনম্যাপ করা মেমরিটির কোনও ভার্চুয়াল ঠিকানা নেই।
MSalters

5

ওএস কার্নেলটি প্রক্রিয়ায় কোড ইনজেকশনের মাধ্যমে নয়, সিপিইউ ক্লক বিঘ্নিত হ্যান্ডলারের কারণে চলমান প্রক্রিয়া থেকে ফিরে নিয়ন্ত্রণ পেতে পারে।

তারা কীভাবে কাজ করে এবং ওএস কার্নেলগুলি কীভাবে তাদের পরিচালনা করে এবং বিভিন্ন বৈশিষ্ট্য প্রয়োগ করে সে সম্পর্কে আরও স্পষ্টতা পেতে আপনার বাধা সম্পর্কে পড়তে হবে ।


কেবল ঘড়ির ব্যাঘাত নয়: যে কোনও বাধা। এবং মোড পরিবর্তন নির্দেশাবলী।
গিলস

3

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

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

(কিছু ব্যবস্থা না প্রোগ্রাম লোড সীমিত পথ, "thunking" নামক লেখা নির্দেশাবলী, এবং দিকে Transmeta প্রসেসর পরিবর্তনশীল নিজস্ব নির্দেশ সেটে recompiled)


এএফএআইসিআর ৩.১ও ছিল সমবায়। উইন 95 যেখানে প্রিপ্রিমটিভ মাল্টিটাস্কিং এসেছে Prot সুরক্ষিত মোড মূলত ঠিকানা জায়গার বিচ্ছিন্নতা নিয়ে আসে (যা স্থিতিশীলতার উন্নতি করে তবে মূলত সম্পর্কিত নয়) re
সিএওও

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

ট্রান্সমিটা x86 এক্সিকিউটেবল কোডটিকে এর উত্স হিসাবে গ্রহণ করেছে, কোনও ব্যাখ্যামূলক ভাষা নয়। আর আমি এক ক্ষেত্রে যা কোডের চিন্তা করেছি হয় একটি ডিবাগার অধীনে চলমান: ইনজেকশনের। এক্স 86 সিস্টেম সাধারণত ব্রেকটপয়েন্টে "INT 03" দিয়ে নির্দেশকে ওভাররাইট করে, যা ডিবাগারে আটকা পড়ে। পুনরায় শুরুতে আসল অপকোডটি পুনরায় স্থাপন করা হয়।
pjc50

ডিবাগিং খুব কমই কেউ কীভাবে কোনও অ্যাপ্লিকেশন চালায়; অ্যাপ্লিকেশন বিকাশকারী এর বাইরে। সুতরাং আমি মনে করি না যে এটি সত্যিই ওপিকে সহায়তা করে।
ডেভ গর্ডন

3

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

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

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

এর কোনওটিতেই "কোড ইনজেকশন" জড়িত না ... এটি সিপিইউ এবং তার সমর্থনকারী সার্কিটের হার্ডওয়্যার বৈশিষ্ট্যগুলির সাথে সহযোগিতায় অপারেটিং সিস্টেমে থাকা কোডের উপর ভিত্তি করে।


2

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

ভিএমওয়্যার এক বা একাধিক নীচে এক সাথে একই হার্ডওয়্যারে অপারেটিং সিস্টেম চালিত করে তার স্তর হিসাবে কাজ করে।

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

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

সুতরাং এই কৌশলটি আপনার বর্ণনার সাথে কিছুটা সাদৃশ্যপূর্ণ।


2

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

পুরানো পিসি সফ্টওয়্যারগুলিতে, যদিও এটি "ওএস" দ্বারা প্রযুক্তিগতভাবে করা হয়নি, তবুও কোডটি কোপ্রোসেসর গণিতের নির্দেশের পরিবর্তে ফাঁদ নির্দেশাবলী দিয়ে তৈরি করা সাধারণ ছিল। যদি কোনও গণিতের ক্যাপ্রোসেসর ইনস্টল না করা থাকে তবে ট্র্যাপ হ্যান্ডলার এটিকে অনুকরণ করে। যদি কোনও কপ্রোসেসর ইনস্টল করা থাকে তবে প্রথমবার কোনও ট্র্যাপ হ্যান্ডলার নেওয়া হলে ট্র্যাপের নির্দেশকে কোনও প্রসেসরের নির্দেশের সাথে প্রতিস্থাপন করা হবে; ভবিষ্যতে একই কোডের মৃত্যুদন্ড কার্যকর করা সরাসরি কপ্রোসেসর নির্দেশ ব্যবহার করবে।


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

এর মধ্যে দুটি ক্ষেত্রেই ওএস অ্যাপ্লিকেশনটিতে কোড ইনজেকশন দেয় নি। ওএস কোডটি ইনজেক্ট করার জন্য সফটওয়্যার বিক্রেতার দ্বারা অ্যাপ্লিকেশনটি এটি "মডিফাই" করার জন্য লাইসেন্স লাগবে যা এটি পায় না। ওএস এর কোড ইনজেক্ট করবেন না।
ডেভ গর্ডন

@ ডেভগোর্ডন আটকা পড়ে থাকা নির্দেশাবলীর যথাযথভাবে অ্যাপ্লিকেশনটিতে ওএস ইনজেকশন কোড বলা যেতে পারে।
গিলস 'খারাপ হয়ে যাওয়া বন্ধ করুন'

@ এসএমএলটারদের আটকা পড়া নির্দেশাবলী সাধারণত ভার্চুয়াল মেশিনে ঘটে।
গিলস 'খারাপ হয়ে যাওয়া বন্ধ করুন'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.