سؤال

على OS X مربع ، نواة 32 بت ثنائي و بعد ذلك يمكن تشغيل 64 بت ثنائي.كيف يعمل هذا ؟

cristi:~ diciu$ file ./a.out
./a.out: Mach-O 64-bit executable x86_64
cristi:~ diciu$ file /mach_kernel
/mach_kernel: Mach-O universal binary with 2 architectures
/mach_kernel (for architecture i386):   Mach-O executable i386
/mach_kernel (for architecture ppc):    Mach-O executable ppc
cristi:~ diciu$ ./a.out
cristi:~ diciu$ echo $?
1
هل كانت مفيدة؟

المحلول

وحدة المعالجة المركزية يمكن أن تنتقل من 64 بت التنفيذ وضع 32 بت عندما الفخاخ في سياق النواة و 32 بت النواة لا يزال يمكن بناؤها على فهم الهياكل مرت من 64 بت المستخدم في تطبيقات الفضاء.

على MacOS X النواة لا مباشرة dereference مؤشرات من المستخدم التطبيق على أي حال ، كما يقيم مساحة عنوان خاص به.المستخدم مساحة المؤشر في ioctl الدعوة ، على سبيل المثال ، يجب أولا أن تحل إلى العنوان ثم جديد العنوان الظاهرية التي تم إنشاؤها في النواة مساحة العنوان.لا يهم حقا ما إذا كان هذا المؤشر في ioctl 64 بت أو 32 بت ، النواة لا إلغاء مرجعية مباشرة في أي من الحالتين.

إذا خلط نواة 32 بت و 64 بت الثنائيات العمل ، والعكس بالعكس.الشيء الذي يمكن القيام به هو مزيج 32 بت المكتبات مع 64 بت التطبيق ، كما مؤشرات مرت بينهما سيكون مبتورا.MacOS X إمدادات أكثر من الأطر في كل من 32 و 64 بت في كل إصدار.

نصائح أخرى

انها ليست النواة الذي يعمل الثنائية.هذا المعالج.

ثنائي استدعاء وظائف المكتبة وتلك التي تحتاج إلى أن تكون 64bit.وإذا كانوا بحاجة إلى إجراء مكالمة النظام, إنها مسؤولية التعامل مع حقيقة أن هم أنفسهم 64bit ، ولكن نواة 32 فقط.

ولكن هذا ليس شيئا سيكون لديك ما يدعو للقلق.

علما أنه لا كل 32 بت حبات هي قادرة على تشغيل 64 بت العمليات.ويندوز بالتأكيد لا يملك هذه الخاصية و أنا لم أر قط ذلك على لينكس.

32 بت النواة التي هي قادرة على تحميل و تشغيل 64 بت الثنائيات بد أن يكون بعض 64 بت رمز للتعامل مع الذاكرة رسم الخرائط, برنامج التحميل و عدد قليل آخر 64 بت القضايا.

ومع ذلك ، فإن جدولة وغيرها الكثير من عمليات OS ليست مطلوبة للعمل في 64 بت من أجل التعامل مع مسائل أخرى - يقوم المعالج 32 بت وضع مرة أخرى حسب الحاجة للتعامل مع السائقين, المهام, تخصيص الذاكرة و رسم الخرائط ، المقاطعات ، إلخ.

في الواقع, معظم الأشياء أن نظام التشغيل لا ليس بالضرورة أداء أي أسرع في تشغيل 64 بت نظام التشغيل ليست ثقيلة معالج البيانات و تلك الأجزاء التي هي (تيارات القرص I/O ، الخ) يحتمل تحويلها إلى 64 بت (الإضافات على نظام التشغيل على أي حال).

ولكن العارية النواة نفسها ربما لن المهام التبديل أي أسرع ، وما إلى ذلك ، إذا كان 64 بت.

هذا هو الحال خاصة عندما كان معظم الناس لا يزال قيد التشغيل 32 بت التطبيقات ، وبالتالي فإن طريقة التحويل لا حاجة دائما, على الرغم من أن انخفاض النفقات العامة العملية ، يستغرق بعض الوقت.

-آدم

وهو ELF32 ملف يمكن أن تحتوي على 64bit تعليمات تشغيل 64 بت.الشيء الوحيد هو وجود هذا التنظيم من رأس الرموز في 32bit الشكل.رموز الجدول إزاحة 32 بت.رمز إدخالات جدول 32 بت واسعة.... الخالملفات التي تحتوي على كود 64 بت و 32 بت رمز يمكن أن تعرض نفسها 32 بت الملف ELF حيث أنه يستخدم 64 بت registors عن الحسابات الداخلية.mach_kernel هو واحد من هذه البرامج القابلة للتنفيذ.ميزة الحصول عليه هو 32 بت سائق الجني يمكن أن يرتبط بها.إذا لم تتخذ الرعاية من تمرير المؤشرات التي تقع تحت 4GBs الأخرى المرتبطة قزم الثنائيات وسوف تعمل بشكل جيد.

للنواة 64 بت فقط جلب ميزة فعالة من أن نواة امتداد (أي عادة السائقين) يمكن أن يكون 64 بت.في الواقع, كنت بحاجة إلى أن يكون إما 64 بت نواة امتداد أو (كما هو الحال الآن) كل من 32 بت منها ؛ فإنها تحتاج إلى أن تكون أصلية في بنية تشغيل kernel.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top