Co trzeba zrobić, aby uruchomić 64-bitowe oprogramowanie użytkownika w 32-bitowym jądrze?


10

W systemach Linux i Windows jestem przyzwyczajony do sytuacji, że potrzebuję 64-bitowego jądra, aby mieć system z wieloma procesami / WoW, w którym mogę uruchamiać oprogramowanie 32-bitowe i 64-bitowe obok siebie.

A potem, lata temu, oszalało mi na myśl, gdy ktoś pokazał mi, że MacOS 10.6 Snow Leopard może uruchamiać 64-bitowe aplikacje z jądrem w trybie 32-bitowym. Można to teraz w dużej mierze zapomnieć, ponieważ była to jednorazowa zmiana technologii. Ze sprzętem wyprzedzającym krzywą w przestrzeni mobilnej, o ile wiem, nigdy nie było to potrzebne w przejściu na 64-bit dla iOS i Androida.

Moje pytanie: Czego potrzeba, aby uzyskać taką samą funkcjonalność w 32-bitowym jądrze Linuksa (i386 lub armhf)?

Rozumiem, że to prawdopodobnie nie jest trywialne. Gdyby tak było, Microsoft mógłby umieścić tę funkcję w 32-bitowym systemie Windows XP. Jakie są jednak ogólne wymagania? Czy kiedykolwiek zaproponowano łatkę lub weryfikację koncepcji?

W świecie osadzonym myślę, że byłoby to szczególnie pomocne, ponieważ obsługa 64-bitowa może pozostawać w tyle przez długi czas w sterownikach urządzeń.


Czy na pewno Snow Leopard może uruchamiać 64-bitowe aplikacje z 32-bitowym jądrem? Jądro IIRC zostało również zaktualizowane na kompatybilnym sprzęcie do wersji 64-bitowej.
mur

5
Nieważne, masz rację: superuser.com/a/340591/334516
mur

Odpowiedzi:


16

Uruchamianie aplikacji 64-bitowych wymaga pewnej obsługi z jądra: jądro musi co najmniej skonfigurować tabele stron, tabele przerwań itp., Jeśli jest to konieczne do obsługi działania 64-bitowego kodu na procesorze, i musi zapisać pełne 64-bitowe kontekst podczas przełączania między aplikacjami (oraz z aplikacji na jądro iz powrotem). Zatem czysto 32-bitowe jądro nie obsługuje 64-bitowej przestrzeni użytkownika.

Jednak jądro może uruchamiać 32-bitowy kod w przestrzeni jądra, jednocześnie obsługując 64-bitowy kod w przestrzeni użytkownika. Obejmuje to obsługę podobną do obsługi wymaganej do uruchamiania 32-bitowych aplikacji z 64-bitowym jądrem: w zasadzie jądro musi obsługiwać 64-bitowe interfejsy, których oczekują aplikacje. Na przykład musi udostępnić mechanizm 64-bitowego kodu do wywołania do jądra i zachować znaczenie parametrów (w obu kierunkach).

Pytanie brzmi zatem, czy warto. Na Macu i niektórych innych systemach można zrobić przypadek, ponieważ obsługa 32-bitowego kodu jądra oznacza, że ​​sterowniki nie muszą wszyscy przełączać się jednocześnie. W Linuksie model programowania jest inny: wszystko w jądrze jest migrowane w razie potrzeby, gdy wprowadzane są duże zmiany, a wszystko poza jądrem nie jest tak naprawdę obsługiwane przez programistów jądra. Obsługa 32-bitowej przestrzeni użytkownika za pomocą 64-bitowego jądra jest z pewnością przydatna i warta wysiłku (przynajmniej było to, gdy dodana została obsługa x86-64), nie jestem pewien, czy istnieje uzasadnienie dla wersji 64-bitowej na 32 -kawałek...


Dzięki temu jest to pomocne, chociaż teraz, gdy Gilles wskazał swoją pokrewną odpowiedź na temat unix.stackexchange, myślę, że bardziej pożądana jest kompletność. Z tego, co zbieram, pochowanego tam w strumieniu komentarzy, najwyraźniej nadal jest to niemożliwe na armhf ze względu na ograniczenia architektoniczne, a teoretycznie wykonalne dla i386? Przypadek do uzasadnienia: początkową motywacją był Raspbian, gdzie planem fundacji jest utrzymanie jednego jądra przez wiele lat, przy jednoczesnym zachowaniu zgodności z Pi Zero.
jdonald

3

Snow Leopard był w stanie uruchomić 64-bitowe pliki binarne w 64-bitowym procesorze Intel.

Był także w stanie uruchomić się z 64-bitowym jądrem, gdy efi miał już 64 bity (moja partia produkcyjna Macbooka „model przejściowy” pro była już taką maszyną).

Nie było żadnej emulacji, po prostu zapłaciłeś mniejszy koszt wydajności podczas rozruchu w trybie 32-bitowym.

W czysto 32-bitowych procesorach nie będziesz w stanie tego zrobić, ponieważ nie mają pojęcia, jak interpretować 64-bitowy kod. Chyba że emulujesz za pomocą oprogramowania, które byłoby wolniejsze dla tego rodzaju tradycyjnie słabej klasy wbudowanych maszyn.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.