উত্তর:
সাধারণ সংকলিত প্রোগ্রামগুলি সিপিইউতে "সরাসরি চালায়", তবে কোনও প্রোগ্রাম শূন্যতায় চলে না:
অনেক প্রোগ্রাম বহিরাগত, গতিশীল লোড লাইব্রেরি ( DLLs
বা .so
গ্রন্থাগার) উপর নির্ভর করে । তাদের লিঙ্ক করার উপায়টি সংকলক / লিঙ্কার অবধি এবং প্রতিটি ওএসের বিভিন্ন মান রয়েছে। তবে, "স্ট্যাটিকালি লিঙ্কড" প্রোগ্রামগুলি রয়েছে যা তাদের নিজস্ব কোড সরবরাহ করে।
একটি আধুনিক ওএস একটি চলমান প্রোগ্রামকে কম্পিউটারের সম্পূর্ণ নিয়ন্ত্রণ দেয় না। প্রোগ্রামগুলি আই / ও-এর জন্য "সিস্টেম কল", হার্ডওয়্যার অ্যাক্সেস এবং সিগন্যাল জাতীয় জিনিস এবং ঘুমের রাজ্যে প্রবেশ করে। উপলব্ধ পরিষেবা এবং ইন্টারফেস ওএস দ্বারা সংজ্ঞায়িত করা হয়। ওএস সিস্টেমের কোন অংশগুলিকে (মেমরি, রেজিস্টার, বাধা) প্রোগ্রাম ব্যবহার করতে দেয় তা নিয়ন্ত্রণ করে।
স্ক্রিনে নিজেকে আঁকতে একটি জিইউআই প্রোগ্রামের অবশ্যই গ্রাফিকাল ব্যবহারকারী পরিবেশের মধ্য দিয়ে কাজ করা উচিত। তবে আপনি সম্ভবত এটি সম্পর্কে ইতিমধ্যে ভেবেছিলেন।
এই কারণে, ওএস-স্বতন্ত্র অ্যাপ্লিকেশনগুলিকে অবশ্যই জাভা রানটাইমের সরবরাহকৃত কোনও ধরণের "ভার্চুয়াল মেশিন" এর উপর নির্ভর করতে হবে। গুরুতরভাবে, একটি ভিএম ওএস সংস্থাগুলিতে (আই / ও, সিগন্যাল ইত্যাদি) একটি মানক ইন্টারফেস সরবরাহ করে। অবশ্যই, জাভা বা অজগর ইন্টেলের নির্দেশিকাটের সেটগুলির স্ফূরণীদের সাথে আচরণ করার পরিবর্তে "বাইটোকোড" ব্যাখ্যা করে; তবে এটি আলাদা গল্প।
বিভিন্ন ওএসের পাশাপাশি বিভিন্ন কার্যকারিতা রয়েছে। উইন্ডোজের I / O সমাপ্তি বন্দর রয়েছে, লিনাক্স নেই। ফ্রিবিএসডি-এর কিউ রয়েছে, লিনাক্স নেই। লিনাক্সের ফিউটেক্স রয়েছে, উইন্ডোজ নেই। তাদের একই জিনিস করার বিভিন্ন উপায় রয়েছে - আপনি কোনও ফাইল খোলার জন্য কোন পরামিতিগুলি পাস করেন? তারা কোন আদেশে যায়? অপারেটিং সিস্টেমটির "একটি ফাইল খুলুন" ফাংশনটি আপনি কীভাবে বিশেষভাবে আবেদন করেন?
সাধারণত, অ্যাপ্লিকেশন বাইনারি ইন্টারফেস (এবিআই) এর পার্থক্যের কারণে প্রোগ্রামগুলি সুসংগত নয় ।
প্রোগ্রামটি কি সরাসরি সিপিইউতে চলে না?
না ! অ্যাপ্লিকেশনগুলিকে সিপিইউতে "সরাসরি" চালানো থেকে বিরত রাখা অপারেটিং সিস্টেমের কাজ । সাধারণত, সর্বনিম্ন স্তরে (যেমন একটি ওএস এপিআই নির্মিত হয়) অপারেটিং সিস্টেমের কার্নেলের সাথে একটি অ্যাপ্লিকেশন ইন্টারফেস করে ।
এটি কি কারণ সংকলিত প্রোগ্রামের নিজেই ওএস নির্দিষ্ট গ্রন্থাগারগুলি উল্লেখ করতে হয়?
হ্যাঁ । অপারেটিং সিস্টেমের সাথেই ইন্টারফেসিংয়ের সুবিধার্থে অনেকগুলি ওএস লাইব্রেরি রচিত হয়, তবে ক্রস-প্ল্যাটফর্ম হিসাবে লেখা অনেকগুলি রয়েছে। এগুলি বিকাশকারীর কাছ থেকে নিম্ন-স্তরের ওএস ইন্টারফেসিংকে আড়াল করে এবং ধরে নেয় যে ওএসের সংকলিত সংস্করণ রানটাইমে পাওয়া যাবে (নীচে দেখুন)।
যদিও লাইব্রেরি করা যাবে লিখিত একটি ক্রস-প্ল্যাটফর্ম পদ্ধতিতে, যখন কম্পাইল তারা যাবে না চালানোর ক্রস-প্ল্যাটফর্ম। অপারেটিং সিস্টেমের বিশেষ অন্তর্নিহিত উপাদানগুলি (কার্নেল) ব্যবহার করতে আবারও তাদের নির্দিষ্ট টার্গেট অপারেটিং সিস্টেমের জন্য পুনরায় সংযুক্ত করা দরকার।
একটি ওএস বনাম অন্য একটি সংকলিত প্রোগ্রামের মধ্যে পার্থক্য কী?
শেষ অবধি, এক্সিকিউটেবল ফাইলগুলি নিজেরাই প্রায়শই খুব নির্দিষ্ট বাইনারি লোডিং শিরোনাম ধারণ করে এবং (যেমন , উইন্ডোজের জন্য পিই এক্সিকিউটেবল ফাইল ফর্ম্যাট [.exe, .dll, ইত্যাদি ...]) অথবা লিনাক্সের জন্য ELF [কোনও নয়, .o, .so) , ইত্যাদি ...])। এগুলিতে একটি নির্দিষ্ট সফ্টওয়্যার লাইব্রেরির জন্য সংকলিত ওএস-নির্দিষ্ট বাইনারি লোড করার কোডও অন্তর্ভুক্ত থাকতে পারে।
শেষ পর্যন্ত, একজন প্রোগ্রামারের দৃষ্টিকোণ থেকে: আহ্বানকারী সম্মেলন । সংকলিত কোড একটি নির্দিষ্ট পদ্ধতিতে (যেমন নিবন্ধকের মাধ্যমে, বা স্ট্যাকের উপর) একটি নির্দিষ্ট পদ্ধতিতে ভেরিয়েবলগুলিকে ফাংশনগুলিতে পাস করে। তারপরেও, ফাংশন কলগুলি (কলার বা কলি?) "সাফাই" দায়িত্বে দায়বদ্ধ এর বিষয়েও একমত হওয়া দরকার। যদিও বেশ কয়েকটি স্ট্যান্ডার্ড এবং বহুল ব্যবহৃত x86 কলিং কনভেনশন রয়েছে তবে কিছু নির্দিষ্ট অপারেটিং সিস্টেম দ্বারা সমর্থিত হতে পারে না (এটি এবিআইয়ের অংশ))