Що потрібно для запуску 64-розрядного програмного забезпечення для користування на 32-бітному ядрі?


10

У Linux та Windows я звик до ситуації, коли мені потрібно 64-бітове ядро, щоб мати систему з мультиархом / WoW, де я можу запускати 32-бітне та 64-бітове програмне забезпечення поряд.

А потім, роки тому, він підірвав мій погляд, коли хтось показав мені, що MacOS 10.6 Snow Leopard може запускати 64-бітні програми з ядром у 32-бітному режимі. Зараз це може бути значною мірою забуто, оскільки це був одноразовий технологічний перехід. З обладнанням, що випереджає криву в мобільному просторі, наскільки я знаю, це ніколи не було потрібно для переходу на 64-розрядні для iOS та Android.

Моє запитання: Що потрібно, щоб отримати таку ж можливість у 32-бітному Linux-ядрі (i386 або armhf)?

Я розумію, що це, мабуть, не банально. Якби це було, Microsoft міг би помістити цю функцію в 32-розрядний Windows XP. Які загальні вимоги є? Чи коли-небудь був запропонований виправлення або доказ концепції?

У вбудованому світі я думаю, що це було б особливо корисно, оскільки 64-бітова підтримка може довго відставати у драйверах пристроїв.


Ви впевнені, що Snow Leopard може запускати 64-розрядні програми з 32-бітним ядром? IIRC ядро ​​також було оновлено на здатному апаратному забезпеченні до 64-розрядних.
муру

5
Неважливо, ви мали рацію: superuser.com/a/340591/334516
muru

Відповіді:


16

Запуск 64-бітних додатків вимагає певної підтримки ядра: ядро ​​потрібно принаймні налаштувати таблиці сторінок, таблиці переривань тощо, якщо це необхідно для підтримки запущеного 64-бітного коду в процесорі, і йому потрібно зберегти повний 64-бітний код контекст при переключенні між додатками (і з додатків до ядра і назад). Таким чином, суто 32-бітове ядро ​​не може підтримувати 64-бітну область користувача.

Однак ядро ​​може виконувати 32-бітний код у просторі ядра, підтримуючи 64-бітний код у просторі користувача. Це включає обробку, подібну підтримці, необхідній для запуску 32-розрядних програм із 64-розрядним ядром: в основному ядро ​​повинно підтримувати 64-бітні інтерфейси, на які очікують програми. Наприклад, він повинен забезпечити деякий механізм для 64-бітного коду для виклику в ядро ​​та збереження значення параметрів (в обох напрямках).

Тоді питання - чи варто того. На Mac та деяких інших системах може бути зроблений випадок, оскільки підтримується 32-розрядний код ядра означає, що драйверам не всі повинні перемикатися одночасно. У Linux модель розробки інша: все, що знаходиться в ядрі, мігрується в міру необхідності, коли вноситься великі зміни, і все, що знаходиться поза ядром, не дуже підтримується розробниками ядра. Підтримка 32-розрядної користувальницької області з 64-розрядним ядром, безумовно, корисна і варте зусиль (принаймні, це було, коли було додано підтримку x86-64), я не впевнений, що для 64-розрядної версії 32 потрібно зробити -біт ...


Дякую, це корисно, хоча зараз, коли Гілль вказав на відповідну відповідь на unix.stackexchange, я думаю, що є більше бажаного для повноти. З того, що я збираю похованим там у потоці коментарів, мабуть, це все ще неможливо в arhf через архітектурні обмеження, хоча теоретично це можливо для i386? Слід зробити: початкова мотивація була Raspbian, де дорожня карта фонду - підтримувати єдине ядро ​​на довгі роки, зберігаючи сумісність з Pi Zero.
jdonald

3

Snow leopard зміг запустити 64 бітні двійкові файли в 64-бітовому процесорі Intel.

Він також міг завантажуватися з 64-бітовим ядром, коли ваш efi вже був 64 біт (моя виробнича партія Mac-версія "перехідна модель" була вже такою машиною).

Ніякої емуляції не було, ви просто заплатили меншу вартість продуктивності під час завантаження в режимі 32-бітного режиму.

У чистих 32-бітових процесорах це зробити вам не вдасться, оскільки вони не мають уявлення, як інтерпретувати 64-бітний код. Якщо ви не емітуєтесь із програмним забезпеченням, яке б сповільнювалося для тих, хто традиційно недостатньо працює вбудований клас машин.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.