এক্সিকিউটেবলগুলি ওএসের উপর নির্ভর করে তবে সিপিইউতে নয়?


16

যদি আমি একটি সি প্রোগ্রাম লিখি এবং এটি একটি .exeফাইলে সংকলন করি তবে .exeফাইলটিতে সিপিইউতে কাঁচা মেশিনের নির্দেশাবলী রয়েছে। (আমি মনে করি).

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

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


4
সিপিইউগুলির স্ট্যান্ডার্ড রয়েছে x86, 64 বি, ইত্যাদি .. এক্সিকিউটেবল ডিও সিপিইউর উপর নির্ভর করে। আপনি আরআইএসসির মতো কয়েকটি বিশেষ সিপিইউতে উল্লিখিত আপনার এক্সি চালাতে পারবেন না, বিশেষ উদ্দেশ্যে
ইনফর্মডএ

ওএসগুলি এক্সিকিউটেবল দ্বারা গঠিত, এবং তারা সিপিইউয়ের উপর নির্ভর করে, ওএসের উপর নয়, কারণ তারা ওএস।
তুলাইনস কর্ডোভা

পিছিয়ে সামঞ্জস্যের কারণে।
MiKL

2
86 এবং 64 বিট কম্পিউটারের জন্য প্রতিটি ওএসের জন্য প্রায়শই দুটি ডাউনলোড : আমি এটি সিপিইউতে এক্সিকিউটেবলের নির্ভরতা হিসাবে ব্যাখ্যা করি।
mouviciel

উত্তর:


37

এক্সিকিউটেবলগুলি ওএস এবং সিপিইউ উভয়ের উপর নির্ভর করে:

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

  • বাইনারি ফর্ম্যাট: এক্সিকিউটেবলকে একটি নির্দিষ্ট বাইনারি ফর্ম্যাটের সাথে সামঞ্জস্য করতে হয়, যা অপারেটিং সিস্টেমটিকে সঠিকভাবে লোড করতে, আরম্ভ করতে এবং প্রোগ্রামটি শুরু করতে দেয়। উইন্ডোজ মূলত পোর্টেবল এক্সিকিউটেবল ফর্ম্যাট ব্যবহার করে, অন্যদিকে লিনাক্স ইএলএফ ব্যবহার করে।

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

সুতরাং যদি দুটি সিস্টেম একই সিস্টেমের API এবং লাইব্রেরি সরবরাহ করে, একই নির্দেশিকা সেটটিতে চালিত হয় এবং একই বাইনারি বিন্যাস ব্যবহার করে, তবে একটি সিস্টেমের জন্য সংকলিত একটি প্রোগ্রাম অন্যটিতে চালিত হবে।

তবে আরও উপযুক্ততা অর্জনের উপায় রয়েছে:

  • AMD64 নির্দেশিকা সেট চলমান সিস্টেমগুলি সাধারণত x86 এক্সিকিউটেবলও চালিত হবে। বাইনারি ফর্ম্যাটটি কোন মোডে চলবে তা নির্দেশ করে। অপারেটিং সিস্টেম দ্বারা 32 বিট এবং 64 বিট উভয় প্রোগ্রাম পরিচালনা করার জন্য অতিরিক্ত প্রচেষ্টা প্রয়োজন।

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

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

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

  • একটি অপারেটিং সিস্টেমের এপিআইগুলি অন্য হোস্ট ওএসের জন্য পুনরায় প্রয়োগ করা যেতে পারে। উইন্ডোজে সাইগউইন এবং পসিক্স সাবসিস্টেমটি একটি (বেশিরভাগ) পসিক্স-অনুবর্তী পরিবেশ পেতে ব্যবহার করা যেতে পারে। লিনাক্সে, ওয়াইন অনেকগুলি উইন্ডোজ এপিআইগুলিকে পুনরায় সরবরাহ করে।

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

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


10
আপনার উল্লেখ করা উচিত যে জাভা এবং .NET উভয়ই মধ্যবর্তী ফর্ম্যাটটি ব্যবহারের উদাহরণ - মধ্যবর্তী ফর্ম্যাটগুলি আজ খুব জনপ্রিয়, এবং কেবল ১৯ 1970০ এর সিস্টেমের একটি প্রতিলিপি নয় যা ৫/ fl ফ্লপপি বন্ধ ছিল।
জোমরনো

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

2

উইন্ডোজ চলমান 99% বর্তমান পিসিগুলির একটি 64 বিট প্রসেসর রয়েছে, যা 32 বিট সফ্টওয়্যার চালাতে সক্ষম। অন্য এক শতাংশে 32 বিট প্রসেসর রয়েছে। সুতরাং 32 বিট প্রসেসরের জন্য নির্মিত সফ্টওয়্যার সর্বত্র চলমান। Bit৪ বিট প্রসেসরের জন্য নির্মিত সফ্টওয়্যার প্রতিটি পিসিতে চলে যা সফ্টওয়্যারটির নির্মাতা যত্নশীল হন।

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


-1

কোনও এক্সে কেবলমাত্র কাঁচা মেশিন কোডের চেয়ে আরও বেশি তথ্য থাকে। ওএস লোড করার সময় এটি পড়ে এবং এটি কীভাবে চালানো উচিত তা নির্ধারণ করতে পারে।

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

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