যে কেউ এমন কোনও প্রোগ্রাম লিখেছেন যা কোনও ওএস ছাড়াই কার্যকর করে, আমি একটি নির্দিষ্ট উত্তর প্রদান করি।
একটি এক্সিকিউটেবল চালনার জন্য একটি ওএস কার্নেল প্রয়োজন?
এটি সেই প্রোগ্রামটি কীভাবে রচিত এবং নির্মিত হয়েছিল তার উপর নির্ভর করে।
আপনি এমন একটি প্রোগ্রাম লিখতে পারেন (ধরে নিবেন যে আপনার জ্ঞান আছে) যার জন্য কোনও OS এর প্রয়োজন হয় না।
এই জাতীয় প্রোগ্রামটি স্বতন্ত্র হিসাবে বর্ণনা করা হয় ।
বুট লোডার এবং ডায়াগনস্টিক প্রোগ্রামগুলি স্বতন্ত্র প্রোগ্রামগুলির জন্য সাধারণ ব্যবহার।
তবে কিছু হোস্ট ওএস এনভায়রনমেন্টে রচিত এবং নির্মিত সাধারণ প্রোগ্রামটি একই হোস্ট ওএস পরিবেশে নির্বাহ করতে ডিফল্ট হবে।
একটি স্বতন্ত্র প্রোগ্রাম লিখতে ও বানাতে খুব সুস্পষ্ট সিদ্ধান্ত এবং ক্রিয়াগুলির প্রয়োজন।
... সংকলক থেকে আউটপুট হ'ল মেশিন কোড (এক্সিকিউটেবল) যা আমি ভেবেছিলাম সরাসরি সিপিইউতে নির্দেশনা ছিল।
সঠিক।
সম্প্রতি আমি কার্নেলগুলি পড়ছিলাম এবং আমি জানতে পেরেছিলাম যে প্রোগ্রামগুলি হার্ডওয়্যারটিতে সরাসরি অ্যাক্সেস করতে পারে না তবে কার্নেলটি দিয়ে যেতে হবে।
এটি একটি সিপিইউ মোড দ্বারা আরোপিত একটি বিধিনিষেধ যা ওএস প্রোগ্রামগুলি সম্পাদন করতে ব্যবহার করে এবং সংকলক এবং গ্রন্থাগারগুলির মতো নির্দিষ্ট বিল্ড সরঞ্জামগুলি দ্বারা সুবিধাজনক।
এটি লিখিত প্রতিটি প্রোগ্রামের একটি স্বতন্ত্র সীমাবদ্ধতা নয়।
সুতরাং যখন আমরা কিছু সাধারণ উত্স কোড সংকলন করি, কেবল একটি প্রিন্টফ () ফাংশন দিয়ে বলি এবং সংকলনটি এক্সিকিউটেবল মেশিন কোড তৈরি করে, এই মেশিন কোডের প্রতিটি নির্দেশ সরাসরি মেমরি থেকে কার্যকর করা হবে (একবার ওএস দ্বারা কোড মেমরিতে লোড হয়ে গেলে) will ) বা মেশিন কোডের প্রতিটি কমান্ডের এখনও ওএস (কার্নেল) সম্পাদন করতে হবে?
প্রতিটি নির্দেশ সিপিইউ দ্বারা কার্যকর করা হয়।
অসমর্থিত বা অবৈধ (যেমন প্রক্রিয়াটির অপর্যাপ্ত সুযোগ রয়েছে) এমন একটি নির্দেশ তাত্ক্ষণিকভাবে ব্যতিক্রম ঘটায় এবং সিপিইউ পরিবর্তে এই অস্বাভাবিক অবস্থাটি পরিচালনা করার জন্য একটি রুটিন সম্পাদন করবে।
একটি printf, () ফাংশনের একটি উদাহরণ হিসাবে ব্যবহার করা উচিত নয় "সরল সোর্স কোড" ।
কোনও বস্তু-ভিত্তিক উচ্চ-স্তরের প্রোগ্রামিং ভাষা থেকে মেশিন কোডে অনুবাদটি আপনার বোঝার মতো তুচ্ছ নয়।
এবং তারপরে আপনি একটি রানটাইম লাইব্রেরি থেকে সবচেয়ে জটিল ফাংশনগুলির একটি চয়ন করেন যা ডেটা রূপান্তর এবং I / O সম্পাদন করে ।
নোট করুন যে আপনার প্রশ্নটি একটি ওএস (এবং একটি রানটাইম লাইব্রেরি) সহ পরিবেশকে স্থির করে।
একবার সিস্টেম বুট হয়ে গেলে, এবং ওএসকে কম্পিউটারের নিয়ন্ত্রণ দেওয়া হয়ে গেলে, কোনও প্রোগ্রাম কী করতে পারে তার উপর বিধিনিষেধ আরোপ করা হয় (উদাহরণস্বরূপ, ওএস দ্বারা I / O অবশ্যই সম্পাদন করা উচিত)।
আপনি যদি স্ট্যান্ডেলোন প্রোগ্রাম কার্যকর করার আশা করেন (অর্থাত্ ওএস ছাড়াই) তবে ওএস চালানোর জন্য আপনাকে অবশ্যই কম্পিউটার বুট করবেন না।
... মেশিন কোডটি মেমরিতে লোড হওয়ার পরে কী ঘটে?
এটি পরিবেশের উপর নির্ভর করে।
একটি স্বতন্ত্র প্রোগ্রামের জন্য, এটি সম্পাদন করা যেতে পারে, অর্থাৎ প্রোগ্রামের প্রারম্ভের ঠিকানায় লাফ দিয়ে নিয়ন্ত্রণ হস্তান্তর করা হয়।
ওএস দ্বারা লোড করা একটি প্রোগ্রামের জন্য, প্রোগ্রামটি নির্ভরশীল ভাগ করে নেওয়া লাইব্রেরিগুলির সাথে গতিশীলভাবে যুক্ত করতে হবে যা এটি নির্ভর করে। ওএসকে এই প্রক্রিয়াটি কার্যকর করার জন্য একটি নির্বাহের স্থান তৈরি করতে হবে।
এটি কার্নেলের মধ্য দিয়ে যাবে বা সরাসরি প্রসেসরের সাথে কথা বলবে?
মেশিন কোড সিপিইউ দ্বারা কার্যকর করা হয়।
তারা "কার্নেলের মধ্য দিয়ে যায় না " , তবে তারা "প্রসেসরের সাথে কথা বলে না" ।
মেশিন কোড (ওপ কোড এবং অপারেন্ডস সমন্বিত) সিপিইউ-র একটি নির্দেশ যা ডিকোড করা হয় এবং অপারেশন করা হয়।
সম্ভবত আপনার পরবর্তী বিষয়টি সিপিইউ মোডগুলি অনুসন্ধান করা উচিত ।