-৪-বিট কার্নেল, তবে সমস্ত 32-বিট ELF এক্সিকিউটেবল চলমান প্রক্রিয়াগুলি, এটি কেমন?


9

থেকে আউটপুট uname:

root@debian:~ # uname -a
Linux 5asnb 2.6.32-5-amd64 #1 SMP Mon Jun 13 05:49:32 UTC 2011 x86_64 GNU/Linux

তবে /sbin/initএক্সিকিউটেবল 32-বিট হিসাবে দেখায়:

root@debian:~ # file /sbin/init
/sbin/init: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped

সিস্টেমের অন্যান্য দিকগুলিও বিষয়গুলির সাথে বিরোধিতা করে বলে মনে হচ্ছে:

root@debian:~ # echo $HOSTTYPE
i486

root@debian:~ # getconf LONG_BIT
32

উত্তর:


13

64 বিট কার্নেলটি ডেবিয়ান 32 বিট-এ ইনস্টল করা যেতে পারে। আপনি দেখতে পাচ্ছেন যে amd64 কার্নেলটি এর প্যাকেজ পৃষ্ঠায় 32 বিট ডেবিয়ানের জন্য উপলব্ধ । মোট র‌্যামের 4G এর বেশি সমর্থন করার জন্য এটি PAE সক্ষম কার্নেল ব্যবহারের বিকল্প হিসাবে ব্যবহার করা যেতে পারে। মনে রাখবেন যে 32 বিট বাইনারিগুলি এখনও প্রক্রিয়া অনুযায়ী প্রায় 3 জি র‍্যামের বেশি অ্যাক্সেস করতে পারে না।


ধন্যবাদ! আপনার উত্তরগুলি একটি স্ফটিক বলের মতো স্পষ্ট ~: ডিবিয়ান এর আগে কার্নেল প্যাকেজের মতো ট্রিট করার বিষয়টি কখনও লক্ষ্য করেনি।
কিউইউই

1
এটি সত্য নয়: 32 বিট প্রোগ্রামগুলি 64-বিট কার্নেলে চলাকালীন তাদের ভার্চুয়াল ঠিকানা স্পেসের পুরো 4Gio ব্যবহার করতে পারে (যদি না তারা ADDR_LIMIT_3GB ব্যক্তিত্বের সাথে চলমান থাকে)।
ysdx

@ysdx সুতরাং 2 জিবি সীমাবদ্ধ করা কি একটি উইন্ডোজ নির্দিষ্ট জিনিস এবং 0x80000000 এর উপরে ঠিকানাগুলি 32-বিট ব্যবহারকারী স্পেসে অনুমতি দেওয়া হবে?
পল স্টেলিয়ান

1
@ পলস্টেলিয়ান, ৩২ বিট উইন্ডোতে আপনি ডিফল্টরূপে রেট্রো-সামঞ্জস্যের জন্য সর্বনিম্ন 2 জিবি ভার্চুয়াল মেমরির মধ্যে সীমাবদ্ধ (আমি মনে করি যে কয়েকটি প্রোগ্রাম বিশেষ উদ্দেশ্যে সর্বাধিক 2 জিবি ভার্চুয়াল মেমরির পয়েন্টার সংরক্ষণ করতে ব্যবহৃত হয়েছিল)। আপনি ভার্চুয়াল মেমরির পুরো 4 জিবি অ্যাক্সেস পেতে অপ্ট-ইন করতে আপনার এক্সিকিউটেবল ( ডকস.মাইক্রোসফট / ফ্রি-fr / cpp / build / references/… ) এ LARGEADDRESSAWARE পতাকা সেট করতে পারেন।
ysdx

15

সমস্ত প্রসেসর যারা x64 নির্দেশিকা সেটকে (x86_64 বা amd64 নামে পরিচিত) সমর্থন করে তারাও x86 নির্দেশিকা সেটকে (i386 বা i686 নামে পরিচিত, যা x86 এর নির্দিষ্ট সংস্করণগুলি কঠোরভাবে বলছে) সমর্থন করে। একই জন্য যায় এআরএম A64 (ARMv8 প্রদর্শনে নতুন 64-বিট নির্দেশ সেট) এবং A32 ( "ধ্রুপদী" 32 বিট নির্দেশ সেট নাম), জন্য SPARC64 এবং SPARC , এবং আমি বিশ্বাস MIPS64 এবং MIPS । সুতরাং এই সমস্ত আর্কিটেকচার পরিবারগুলিতে, যদি কোনও প্রসেসর 64৪-বিট কোড চালাতে পারে তবে এটি ৩২-বিট কোডও চালাতে পারে।

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

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

আপনি পেতে পারেন CPU- র তথ্য মধ্যে /proc/cpuinfo। যদি আপনার x86 সিপিইউতে lmপতাকা থাকে তবে এটি একটি 64-বিট সিপিইউ।

ডিফল্টরূপে, uname -mবা archকার্নেলটি সংকলিত আর্কিটেকচারটি দেখায়। লিনাক্স একটি প্রক্রিয়াটির "ব্যক্তিত্ব" সেট করতে পারে ( personalityসিস্টেমের সাথে )। setarchকমান্ডটি দিয়ে আপনি একটি ভিন্ন ব্যক্তিত্বের একটি সাবপ্রসেস চালাতে পারেন ; setarch i686 someprogramবা linux32 someprogramএকটা পরিবেশে নির্দিষ্ট প্রোগ্রাম রান যেখানে uname -mআয় i686যখন setarch amd64 someprogramবা linux64 someprogramএকটা পরিবেশে নির্দিষ্ট প্রোগ্রাম যেখানে রান uname -mআয় amd64

file /sbin/initinitপ্রোগ্রামটি কী আর্কিটেকচারের জন্য সংকলিত তা আপনাকে জানায় । যদিও কোনও ইনস্টলেশনে 32-বিট এবং 64-বিট এক্সিকিউটেবলের মিশ্রণ সম্ভব, সাধারণত সমস্ত মূল ওএস প্রোগ্রাম একই আর্কিটেকচার থেকে হয়, কারণ এটি পরিচালনা করা অনেক সহজ।

$HOSTYPEএটি একটি বাশ ভেরিয়েবল এবং আপনাকে জানায় যে bashপ্রোগ্রামটি কী আর্কিটেকচারের জন্য সংকলিত হয়েছিল।

getconf LONG_BITআপনাকে ডিফল্ট সি সংকলক 32-বিট বা 64-বিট প্রোগ্রামগুলি সংকলনের জন্য সেট আপ করা হয়েছে তা জানতে দেয়। আরও সুনির্দিষ্ট পরীক্ষাটি হ'ল একটি সংকলন করা এবং একটি প্রোগ্রাম পরিচালনা করা যা প্রিন্ট করে sizeof(void*)বা sizeof(size_t)- কলিং getconfকেবলমাত্র getconfডিফল্ট সংকলক বলে মনে করে সে সম্পর্কে তথ্য দিতে পারে ।


1
আসলে, 32 বিট সোলারিস কি 64-বিট প্রক্রিয়াতে স্যুইচ করতে আবার 64-বিট মোডে স্যুইচ করে? এর অবশ্যই একটি বিশাল ওভারহেড থাকতে হবে এবং এটি কোনও অর্থবোধ করে না, কারণ তখন কার্নেলটি কার্যকরভাবে কার্যকরভাবে 64 বিট হয়।
রুসলান

1
@ রুসলান কেন এটির একটি বিশাল ওভারহেড থাকবে? প্রসঙ্গের সুইচে মোডগুলি স্যুইচ করার জন্য খুব বেশি খরচ হয় না (যদি কিছু হয় তবে আমি কম স্তরে যথেষ্ট পরিমাণে x86 জানি না)। কার্নেলটি 32-বিট: 32-বিট ভার্চুয়াল ঠিকানাগুলি কার্নেল ম্যাপিংয়ের জন্য, 32-বিট নির্দেশিকা সেট ব্যবহার করে।
গিলস 'তাই খারাপ হওয়া বন্ধ করুন'

1
কমপক্ষে bit৪ বিট-সচেতন পৃষ্ঠা সারণীগুলিকে সমর্থন করতে কার্নেলের অবশ্যই কিছু -৪-বিট-নির্দিষ্ট ডেটা স্ট্রাকচার বজায় রাখতে হবে। এটি এটিকে সত্যই 32 বিটের কার্নেল হিসাবে তৈরি করে না। আমি সত্যিই এমডি 64 খিলানের গভীরে যাওয়ার চেষ্টা করিনি, তবে আমি মনে করি বিশেষভাবে নকশা করা সামঞ্জস্যতা মোড ব্যবহার করার বিপরীতে bit৪ বিট সাপোর্ট বন্ধ করার পক্ষে যথেষ্ট ওভারহেড থাকবে।
রুসলান

1
@ রুসলান কেবলমাত্র -৪-বিট সচেতন পৃষ্ঠাগুলি এবং সত্যই প্রয়োজনীয় এবং এটি একটি স্বল্প ব্যয়। সঠিক কর্নেল ডিজাইন দিয়ে অন্য সব কিছু এড়ানো যায়। আমি কখনও সোলারিস কার্নেলের মধ্যে খনন করি নি, আমি মনে করি তারা এটিকে যথেষ্ট নমনীয় করে তোলার ব্যবস্থা করেছে (স্পারক 64৪ এর সাথে তাদের পূর্ব অভিজ্ঞতা ছিল)।
গিলস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.