কেন একটি 64 বিট ওএস 16 বিট অ্যাপ্লিকেশন চালাতে পারে না?


38

কেন যে:

  • একটি 32-বিট ওএস, যখন 64-বিট সিপিইউতে ইনস্টল করা হয়, পুরানো 16-বিট অ্যাপ্লিকেশন চালাতে পারে,
  • তবে আপনি যদি 64৪-বিট ওএস ইনস্টল করেন তবে এটি সরাসরি সেই অ্যাপ্লিকেশনগুলি চালাতে পারে না এবং একরকম অনুকরণের প্রয়োজন হয় (এটি সর্বদা নিখুঁতভাবে কাজ করে না)?

আরও নির্দিষ্ট করে বলতে গেলে, আমার একটি 64৪-বিট প্রসেসর রয়েছে (ইন্টেল কোর 2 ডুয়ো)। যখন আমি উইন্ডোজ এক্সপি এবং উইন্ডোজ 7 (উভয় 32-বিট) ইনস্টল করেছি তখন তারা পুরানো ডস এবং 616-বিট উইন্ডোজ অ্যাপ্লিকেশন চালাতে পারে।

এখন আমি উইন্ডোজ of এর bit৪-বিট সংস্করণ ইনস্টল করেছি have কেন এটি একই অ্যাপ্লিকেশনগুলি আর চালাতে পারে না?


3
আমি মনে করি এর বিটগুলির সাথে কম এবং অতিথি অপারেটিং সিস্টেমের সাথে আরও কিছু করার আছে। আপনি বিশেষত কোন ওএসটির উল্লেখ করছেন?
পেক্কা GoFundMonica

এটি কি ডসবক্সের অধীনে চলবে?
পেঙ্গুয়াট

1
ডসবক্স নামে একটি ইউটিলিটি রয়েছে এটির একটি 16 বিট এমুলেটর যা আপনার 16 বিট প্রোগ্রামটি ভার্চুয়াল 16 বিট কম্পিউটারকে কাজ করতে দেয় এবং এটি বিনামূল্যে।

আমি পেক্কার সাথে একমত, সত্য যে একটি 64-বিট (হার্ডওয়্যার) সিস্টেম 16-বিট কোড (হেক, এমনকি 1-বিট কোড ওএসটি ডিজাইন করা থাকলে) চালাতে পারে । আসল ধরাটি হ'ল বিভিন্ন পয়েন্টার আকারের মতো জিনিসের কারণে সিপিইউ 16-বিট কোডটি সরাসরি চালাতে পারে না , তবে এই সমস্যাগুলি ওএস দ্বারা বিমূর্ত করা যেতে পারে। সীমাবদ্ধতা এমন একটি কৃত্রিম যা মাইক্রোসফ্ট জিনিসগুলি সরল করার জন্য চাপিয়েছিল (যদিও তারা এখনও 32-বিট অনুকরণ করেছে কারণ এখনও 32-বিট কোড রয়েছে)। অন্যান্য ওএস (* নিক্স?) ​​রয়েছে যা ইস্যু ছাড়াই 16-বিট কোড চালাতে পারে।
Synetech

আপনি সমস্ত ওএস দিয়ে উইন্ডোজকে বিভ্রান্ত করছেন।
কেন শার্প

উত্তর:


24

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

আমি মনে করি তারা এগুলি হ্যান্ডল করার জন্য ইতিমধ্যে বিদ্যমান ভার্চুয়ালাইজেশন সফ্টওয়্যার (ভার্চুয়ালপিসি, ভার্চুয়ালবক্স) ব্যবহার করে একটি এমুলেশন স্তর বনাম পুনরায় প্রয়োগ করেছে ig


6
উইকিপিডিয়া থেকে উদ্ধৃতি : N৪-বিট আর্কিটেকচারের জন্য উইন্ডোজ এনটি এর সংস্করণ (x64 এবং আইএ -৪৪) এনটিভিডিএম অন্তর্ভুক্ত করে না এবং ডস বা ১--বিট উইন্ডোজ অ্যাপ্লিকেশন চালাতে অক্ষম। এটি কারণ, কোনও x86-64 সিপিইউতে, ভার্চুয়াল 8086 মোড কেবলমাত্র তার উত্তরাধিকারী মোডে (16- এবং 32-বিট অপারেটিং সিস্টেম চালানোর জন্য) উপ-মোড হিসাবে উপলব্ধ, নেটিভ নয়, 64-বিট দীর্ঘ মোডে; লিগ্যাসি মোডে স্যুইচ করতে সিপিইউর একটি হার্ড রিসেট প্রয়োজন। সুতরাং এনটিভিডিএম এখন পর্যন্ত কীভাবে কাজ করেছে তার একমাত্র উপায় আর উপলভ্য নয় এবং পূর্ণ ভিএমগুলি সেখানে বিচ্ছিন্ন হয়ে পড়েছে, সুতরাং এনটিভিডিএম কেটে দেওয়া হয়েছিল।
জো

5
হ্যাঁ, আমি বিশ্বাস করতে পারি না তারা ভি 8686 মোড ফেলে দিয়েছে। পাশাপাশি রিয়েল মোডটি পুরোপুরি টস করতে পারে এবং আপনি যদি এটি করতে যাচ্ছেন তবে 32/64 বিট বুট লোডারগুলির দাবি করুন।
ব্রায়ান নোব্লাচ

5
এমনিতেই এমনি ঘটেছিল এম এম নোবলাচ। EFI ফার্মওয়্যার সহ একটি আধুনিক x86 মেশিনটি প্রথম কয়েকটি নির্দেশাবলীতে অবাস্তব মোড থেকে সোজা 64/32-বিট সুরক্ষিত মোডে চলে যায়। বুট লোডারগুলি প্রকৃতপক্ষে 64/32-বিট সুরক্ষিত মোড প্রোগ্রাম। EFI বুট অ্যাপ্লিকেশন এটাই। প্রক্রিয়াটির কোথাও আসল মোড বা v8086 সুরক্ষিত মোডের কোনও ব্যবহার নেই।
JdeBP

3
-1। WINE 64-বিট লিনাক্সে ভিএম 86 ​​মোডে 16-বিট উইন্ডোজ অ্যাপ্লিকেশনগুলি চালনা করে। স্ক্রিনশটV86-64 প্রকল্প পৃষ্ঠা । মেহরদাদের উত্তর আরও জোরালো কারণ বলে মনে হচ্ছে।
হিউ অ্যালেন

3
@ হুগলেন: সেই পৃষ্ঠাটিতে বর্তমানে বলা হয়েছে "বর্তমানে লিনাক্স কার্নেলের 64৪-বিট সংস্করণে ভি ৮ mode মোডের সমর্থন নেই কারণ এটি এই প্রসেসরের নেটিভ অপারেটিং মোডে (লং মোড) সমর্থিত নয়" " এবং "এই প্যাচটি খুব পরীক্ষামূলক ।" সংক্ষিপ্ত উত্তরটি হ'ল লং মোডটি পুরোপুরি বেরিয়ে এসে 16-বিট কোড চালানো সম্ভব হলেও এটি করা বুদ্ধিমানের নয় ।
হ্যারি জনস্টন

14

কারণ 64-বিট হ্যান্ডলগুলির 32 টি গুরুত্বপূর্ণ বিট রয়েছে :

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

উইন্ডোজে প্রোগ্রামগুলি ওএস এবং তদ্বিপরীতকে "হ্যান্ডলগুলি" প্রায় দেয় (যা এমন একটি সংখ্যা যা ওএস একটি নির্দিষ্ট উত্স যেমন উইন্ডোকে স্বতন্ত্রভাবে সনাক্ত করতে ব্যবহার করে)।

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

যাইহোক, এটির উন্নতি করার জন্য, 64-বিট উইন্ডোজ একটি হ্যান্ডেলটিতে উল্লেখযোগ্য বিটের সংখ্যা 32-এ বাড়িয়েছে But তবে এখন এর অর্থ হ্যান্ডলগুলি তথ্য ক্ষতি ছাড়াই 16-বিট প্রোগ্রামগুলিতে পাস করা যাবে না। সুতরাং 16-বিট প্রোগ্রামগুলি 64-বিট উইন্ডোতে চলতে পারে না।


3
@ জো: আপনি কী বলছেন তা আমি বুঝতে পারছি না। যদি ওএসটি 64৪-বিট উইন্ডোজ হয়, তবে ১ 16-বিট অ্যাপ্লিকেশনগুলি এতে পিরিয়ড চলতে পারে না। আমি দেখতে পাচ্ছি না যে তারা "ডস" বা "উইন্ডোজ" অ্যাপ্লিকেশন হ'ল এখানে কীভাবে কিছু পরিবর্তিত হয় - যেভাবেই হ্যান্ডলগুলি অ্যাপ্লিকেশনটির মাধ্যমে কাটা উচিত।
মেহরদাদ

1
ডস অ্যাপ্লিকেশনগুলির কোনও হাতল নেই। আসলে, তারা (সাধারণত) এমনকি তারা উইন্ডোতে চলছে তা জানেন না on
জো

1
... আসলে, উইন 16 কোডও খুব বেশি সমস্যা হওয়া উচিত নয়, এখন যে আমি এটি নিয়ে ভাবছি। আপনার যা দরকার তা হ'ল একটি লুকানোর টেবিল।
হ্যারি জনস্টন

1
@ হারি জোনস্টন: আমি মনে করি আপনি সমস্যাটি মিস করছেন। যখন কোনও অ্যাপ্লিকেশন কল আসে EnumWindowsএবং সিস্টেমে 2 ^ 16 টিরও বেশি উইন্ডোজ থাকে তখন আপনি আপনার কল্পিত "লুকিং টেবিল" এর সাথে কী হওয়া উচিত ?
মেহরদাদ

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

10

উইন্ডোজের জন্য, কারণ ওএসের x86 সংস্করণে 16-বিট এমুলেশন রয়েছে যা তাদের সেই পুরানো ডস প্রক্রিয়া চালাতে দেয়। X64 সংস্করণগুলিতে, 32-বিট প্রসেসগুলি চালুর অনুমতি দেওয়ার জন্য তাদের ইতিমধ্যে x86 এক্সিকিউশনটি (তারা ওউডাব্লু 64 বলে) অনুকরণ করতে হবে এবং আমি অনুমান করি যে Wow64 এর সাহায্যে আরও 16 টি-বিট এমুলেটর অনুকরণ করতে অনেক বেশি সমস্যা হয়েছে।

মুষ্টিমেয় স্বীকৃত 16-বিট প্রক্রিয়াগুলি চলবে কারণ এগুলিকে হ্যান্ডেল করার জন্য এমুলেশনটি হার্ড-কোডেড রয়েছে, তবে বাকীগুলি কাজ করে না কারণ এক্সুলেশনটি এম 64 এ অন্তর্ভুক্ত নয়।

এমএসকেবি নিবন্ধটিতে "কোনও 16-বিট কোড নয়" দেখুন: http : //support.mic Microsoft.com/kb/282423


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

@ ক্রিস কামিনস্কি - আমি আশ্চর্য হয়েছি যে তারা কোনও আর্কিটেকচারের সিদ্ধান্ত হিসাবে এটি করত - x86 বনাম x64 - "ঠিক আছে - এটি উইন্ডোজ 7, ​​এবং আমরা আর 16-বিট প্রক্রিয়া চালাচ্ছি না" বলার বিপরীতে। বিশেষত "উইন্ডোজ এক্সপি মোড" এখন 7-এ এমবেড করা আছে, এটি x86 সংস্করণে এমনকি সমর্থন কেটে নেওয়ার উপযুক্ত সময় বলে মনে হচ্ছে।
স্ক্যালরিয়ান

@ ক্রিস কামিনস্কি: এটিকে আরও কিছু চিন্তাভাবনা করার পরে, আমি মনে করি এটি কেবল একটিরকম এপিআই-মাকিং নয়, এটির অনুকরণ করতে হবে। যদি এটি স্থানীয় বিট-বিল্ডের কোড স্থানীয়ভাবে চালাতে পারে, তবে x64-এ 32-বিট অ্যাপ্লিকেশনগুলি চালানোর জন্য Wow64 কেন থাকবে - যারা স্থানীয়ভাবে চালিত হবে না?
স্কেলরিয়ান

@darthcoder: সিপিইউ লম্বা (bit৪ বিট) মোডে এনটিভিডিএম দ্বারা প্রয়োজনীয় ভার্চুয়াল 8086 মোডটিকে সমর্থন করে না। সুতরাং এনটিভিডিএমকে একটি সম্পূর্ণ ভিএম হতে হবে, সমস্ত কিছুকে অনুকরণ করে বা কাটাতে হবে। যেহেতু ইতিমধ্যে সেখানে যথেষ্ট ভিএম রয়েছে (এবং এমএসের একটি রয়েছে) এটি কোনও কঠিন সিদ্ধান্ত ছিল না। আমি মনে করি না যে এটি কতটা পুরানো বা কতটা ব্যবহৃত হয়েছিল তার সাথে কিছু করার আছে।
জো

rwmnau: ওউডাব্লু 64 এর জন্য কোনও এমুলেশন চলছে না (ইটানিয়াম বাদে)। x64-64 সিপিইউগুলি এখনও 32-বিট নির্দেশাবলী সমর্থন করে তাই প্রায় সমস্ত উইন্ডোজকে সিপিইুকে 32-বিট মোডে স্যুইচ করতে হয় এবং কয়েকটি পয়েন্টার সহ গণ্ডগোল করে।
জো

3

আমি ভুল হলে আমাকে সংশোধন করুন, তবে আমার বুঝতে এটি কেবল উইন্ডোজ-নির্দিষ্ট সমস্যার কারণে এনটিভিডিএম ভার্চুয়াল 8086 মোড ব্যবহার করছে। X64 প্রসেসরের সামঞ্জস্যতা মোড (দীর্ঘ মোডে চলমান) পুরো 'ক্লিন' সুরক্ষিত মোড সমর্থন করে, আমি যা পেয়েছি তা থেকে 16 এবং 32 বিট: http://en.wikedia.org/wiki/Long_mode , তবে এর কিছু নয় 386 সংযোজন যেমন ভার্চুয়াল 8086 মোড। সুতরাং এটি সম্ভবত সমর্থিত নয় কারণ এটি এনটিভিডিএম পুনরায় প্রোগ্রাম করার জন্য মাইক্রোসফ্টের অর্থ প্রদান করে না, যার জন্য সম্ভবত আরও কিছু অনুকরণ যুক্ত করা দরকার কারণ কিছু 16-বিট সুরক্ষিত মোড অ্যাপ্লিকেশন ভার্চুয়াল 8086 ব্যবহার করতে পারে, যদিও বেশিরভাগ না করে। আমি মনে করি পর্যাপ্ত শ্রম দিয়ে লং মোডে চলমান ডসবক্সের চেয়ে আরও দ্রুত কিছু লেখা সম্ভব, যেহেতু 16 বিট অ্যাপসের জন্য হার্ডওয়্যার সমর্থন রয়েছে।


-1। 16 বিট মোডে সম্বোধন করে ওরফে 16 বিট বিভাগ স্থানীয় বর্ণনাকারী টেবিলের মাধ্যমে সমর্থিত। । আসলে লিনাক্সে উইনডেভিএম ঠিক তাই করে! এমনকি একটি বেসরকারী প্রতিস্থাপনও আছে যার নাম রয়েছে otvdm
ব্যবহারকারী 2284570

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

এটিতে একটি এমুলেটর রয়েছে তবে যদি স্থানীয় বর্ণনাকারী টেবিলটি সংশোধন করার কোনও উপায় উইন্ডোজে পাওয়া যায় তবে কোনও মানচিত্রের কোনও প্রয়োজন হবে না। বাস্তব মোড সম্পর্কে সেগুলিও ডসেমু (লিনাক্স সংস্করণ কমপক্ষে) এর মতো করে অনুকরণ করা যায়। এনটিভিডিএম প্রাথমিকভাবে মাইস বা পাওয়ারপিসির মতো প্ল্যাটফর্মে ডস প্রোগ্রাম চালানোর অনুমতি দেওয়ার জন্য ডিজাইন করা হয়েছিল যা উইন্ডোজের পূর্ববর্তী সংস্করণে সমর্থিত ছিল। এটি কেবলমাত্র একটি Feচ্ছিক বৈশিষ্ট্য যা সংকলনের সময় সক্ষম করা দরকার। এবং দেখা যাচ্ছে যে উত্স কোডটি ফাঁস হয়ে গেছে যাতে কাউকে কেবল এটি করতে দেয়: কলম্বিয়া.ইডু
~em36

3

ডস অ্যাপ্লিকেশন এবং 16 বিট উইন্ডো অ্যাপ্লিকেশনগুলির জন্য পরিস্থিতি আলাদা।

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

16 বিট উইন্ডোজ অ্যাপ্লিকেশনগুলির জন্য (যা 16 বিট সুরক্ষিত মোডে চলমান) এর কারণটি হ'ল এমএস উপযুক্ত উপযুক্ততা স্তরটি বাস্তবায়নের জন্য কাজ করতে প্রস্তুত ছিল না। মজাদারভাবে ওয়াইন 64 বিট লিনাক্সে 16 বিট উইন্ডো অ্যাপ্লিকেশন চালানোর জন্য পুরোপুরি সক্ষম।


1
এটি কেবলমাত্র because৪-বিট উইন্ডোতে কোনও এনটিভিডিএম নেই। সিপিইউ এখনও সামঞ্জস্যতা মোডে 16-বিট কোড চালাতে পারে। ইন্টেল ম্যানুয়াল থেকে: "সামঞ্জস্যতা মোড (আইএ -32e মোডের উপ-মোড) - সামঞ্জস্যতা মোড বেশিরভাগ উত্তরাধিকার 16-বিট এবং 32-বিট অ্যাপ্লিকেশনগুলিকে 64-বিট অপারেটিং সিস্টেমের অধীনে পুনরায় সংকলন ছাড়াই চলতে অনুমতি দেয়"
ফুক্লভ

আমি এটি বুঝতে পারি যে সামঞ্জস্যতা মোড 16 বিট সুরক্ষিত মোডের অনুমতি দেয় তবে ভার্চুয়াল 8086 মোডে নয়।
প্লাগওয়াশ

2

আমি মনে করি যে সম্ভবত সম্ভাব্য কারণ হ'ল পিসি মালিকরা কেবলমাত্র একটি ক্ষুদ্র শতাংশই তাদের নতুন bit৪ বিট হার্ডওয়ারে পুরানো ১ bit বিট অ্যাপ্লিকেশন চালাতে সক্ষম হতে চান। মাইক্রোসফ্ট সম্ভবত বুঝতে পেরেছিল যে 16 বিট অ্যাপ্লিকেশনগুলিকে সমর্থন অব্যাহত রাখার সময় এটি তাদের পক্ষে উপযুক্ত নয়।


এটি উইন্ডোজ bit 32 বিট ব্যতীত এখনও এটি সমর্থন করে তা বোঝায়, সুতরাং স্পষ্টতই এটি ইতিমধ্যে যা রয়েছে তা ব্যবহার করে তবে এটি পুনরায় সংশোধন না করা (যেমন ভার্চুয়াল
-৮০86

আমি ভাবছিলাম যে "আমরা একটি জটিল কোড বেস বজায় রাখতে চাই না"। যদি তারা 16-বিটে রাখে তবে তাদের সম্ভবত এমন সফ্টওয়্যার সমর্থন করতে হবে যা 80 এর দশকের। এর মধ্যে কুরুচিপূর্ণ হ্যাকগুলি অন্তর্ভুক্ত থাকতে পারে যাতে পদ্ম 1-2-2 এখনও কাজ করে।
জো প্লান্ট

@ ইয়ারলজ হ্যাঁ তবে আমি মনে করি যে 16 বিটের জন্য স্থানীয় বর্ণনাকারী টেবিলটি অ্যাক্সেস করার জন্য এটি আসল সমাধান হিসাবে আসল সমাধান হ'ল এটি সরাসরি করা এবং ভিএম 86 ​​মোডের মাধ্যমে নয়। মাইক্রোসফ্ট কেবল তাদের কোড পোর্টিং করতে বিরক্ত করে না। প্রকৃতপক্ষে একটি এনটিও আনঅফিসিয়াল সফ্টওয়্যার প্রতিস্থাপন রয়েছে যা উইন্ডোজ native৪ বিটের জন্য নকশাকৃত
ব্যবহারকারী 2284570
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.