বিভিন্ন ওএসের জন্য সংকলিত প্রোগ্রামগুলির মধ্যে পার্থক্য


8

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

উত্তর:


6

সাধারণ সংকলিত প্রোগ্রামগুলি সিপিইউতে "সরাসরি চালায়", তবে কোনও প্রোগ্রাম শূন্যতায় চলে না:

  1. অনেক প্রোগ্রাম বহিরাগত, গতিশীল লোড লাইব্রেরি ( DLLsবা .soগ্রন্থাগার) উপর নির্ভর করে । তাদের লিঙ্ক করার উপায়টি সংকলক / লিঙ্কার অবধি এবং প্রতিটি ওএসের বিভিন্ন মান রয়েছে। তবে, "স্ট্যাটিকালি লিঙ্কড" প্রোগ্রামগুলি রয়েছে যা তাদের নিজস্ব কোড সরবরাহ করে।

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

  3. স্ক্রিনে নিজেকে আঁকতে একটি জিইউআই প্রোগ্রামের অবশ্যই গ্রাফিকাল ব্যবহারকারী পরিবেশের মধ্য দিয়ে কাজ করা উচিত। তবে আপনি সম্ভবত এটি সম্পর্কে ইতিমধ্যে ভেবেছিলেন।

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


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

এই পার্থক্যগুলি স্থিতিশীলভাবে সংকলিত কোডটি কার্যকর করতে বাধা দেবে? জানতেন না ..
অ্যালেক্সিস

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

5

বিভিন্ন ওএসের পাশাপাশি বিভিন্ন কার্যকারিতা রয়েছে। উইন্ডোজের I / O সমাপ্তি বন্দর রয়েছে, লিনাক্স নেই। ফ্রিবিএসডি-এর কিউ রয়েছে, লিনাক্স নেই। লিনাক্সের ফিউটেক্স রয়েছে, উইন্ডোজ নেই। তাদের একই জিনিস করার বিভিন্ন উপায় রয়েছে - আপনি কোনও ফাইল খোলার জন্য কোন পরামিতিগুলি পাস করেন? তারা কোন আদেশে যায়? অপারেটিং সিস্টেমটির "একটি ফাইল খুলুন" ফাংশনটি আপনি কীভাবে বিশেষভাবে আবেদন করেন?


ঠিক আছে তা বোঝার জন্য, তবে সাধারণভাবে, প্রোগ্রামটি কি মেমরির মধ্যে লোড হয় এবং
সিপিইউতে

1
@ জোগোভাইজার: উভয়ই। তারা পারস্পরিক একচেটিয়া নয়। সাধারণত, ওএস একটি নিয়ন্ত্রিত পরিবেশ স্থাপন করবে এবং একটি নির্দিষ্ট সময়ের মধ্যে হার্ডওয়্যারকে প্রোগ্রামটি বাধাগ্রস্থ করার ব্যবস্থা করবে এবং তারপরে কোরটিকে প্রোগ্রামটির দিকে ফিরিয়ে দেবে। তবে প্রোগ্রামটি যে কোনও শর্তের হিট হওয়ার সাথে সাথে (যেমন একটি পৃষ্ঠা ত্রুটি, আই / ও অপারেশন, বা এর মতো) ওএস আবার গ্রহণ করবে।
ডেভিড শোয়ার্টজ

5

সাধারণত, অ্যাপ্লিকেশন বাইনারি ইন্টারফেস (এবিআই) এর পার্থক্যের কারণে প্রোগ্রামগুলি সুসংগত নয় ।

প্রোগ্রামটি কি সরাসরি সিপিইউতে চলে না?

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

এটি কি কারণ সংকলিত প্রোগ্রামের নিজেই ওএস নির্দিষ্ট গ্রন্থাগারগুলি উল্লেখ করতে হয়?

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

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

একটি ওএস বনাম অন্য একটি সংকলিত প্রোগ্রামের মধ্যে পার্থক্য কী?

শেষ অবধি, এক্সিকিউটেবল ফাইলগুলি নিজেরাই প্রায়শই খুব নির্দিষ্ট বাইনারি লোডিং শিরোনাম ধারণ করে এবং (যেমন , উইন্ডোজের জন্য পিই এক্সিকিউটেবল ফাইল ফর্ম্যাট [.exe, .dll, ইত্যাদি ...]) অথবা লিনাক্সের জন্য ELF [কোনও নয়, .o, .so) , ইত্যাদি ...])। এগুলিতে একটি নির্দিষ্ট সফ্টওয়্যার লাইব্রেরির জন্য সংকলিত ওএস-নির্দিষ্ট বাইনারি লোড করার কোডও অন্তর্ভুক্ত থাকতে পারে।


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

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