Apa yang diperlukan untuk menjalankan perangkat lunak userland 64-bit pada kernel 32-bit?

10

Di Linux dan Windows, saya terbiasa dengan situasi bahwa saya memerlukan kernel 64-bit untuk memiliki sistem dengan multiarch / WoW di mana saya dapat menjalankan perangkat lunak 32-bit dan 64-bit secara berdampingan.

Dan kemudian, bertahun-tahun yang lalu terlintas di benak saya ketika seseorang menunjukkan kepada saya bahwa MacOS 10.6 Snow Leopard dapat menjalankan aplikasi 64-bit dengan kernel dalam mode 32-bit. Ini mungkin sebagian besar dilupakan sekarang karena itu adalah transisi teknologi satu kali. Dengan perangkat keras di depan kurva di ruang mobile, sejauh yang saya tahu ini tidak pernah diperlukan untuk pindah ke 64-bit untuk iOS dan Android.

Pertanyaan saya: Apa yang diperlukan untuk mendapatkan kapabilitas yang sama dalam kernel Linux 32-bit (i386 atau armhf)?

Saya mengerti bahwa ini mungkin tidak sepele. Jika ya, Microsoft bisa memasukkan fitur ke dalam Windows XP 32-bit. Apa saja persyaratan umum? Apakah pernah ada patch yang diusulkan atau proof-of-concept?

Di dunia tertanam saya pikir ini akan sangat membantu, karena dukungan 64-bit dapat tertinggal untuk waktu yang lama pada driver perangkat.

jdonald
sumber
Apakah Anda yakin Snow Leopard dapat menjalankan aplikasi 64-bit dengan kernel 32-bit? IIRC kernel juga diperbarui pada perangkat keras yang mampu 64-bit.
muru
5
Sudahlah, Anda benar: superuser.com/a/340591/334516
muru

Jawaban:

16

Menjalankan aplikasi 64-bit memerlukan beberapa dukungan dari kernel: kernel perlu setidaknya mengatur tabel halaman, mengganggu tabel dll sebagaimana diperlukan untuk mendukung menjalankan kode 64-bit pada CPU, dan perlu menyimpan 64-bit penuh konteks ketika berpindah antar aplikasi (dan dari aplikasi ke kernel dan kembali). Jadi kernel 32-bit murni tidak dapat mendukung userspace 64-bit.

Namun kernel dapat menjalankan kode 32-bit di ruang kernel, sambil mendukung kode 64-bit di ruang pengguna. Itu melibatkan penanganan yang mirip dengan dukungan yang diperlukan untuk menjalankan aplikasi 32-bit dengan kernel 64-bit: pada dasarnya, kernel harus mendukung antarmuka 64-bit yang diharapkan oleh aplikasi. Sebagai contoh, ia harus menyediakan mekanisme untuk kode 64-bit untuk memanggil kernel, dan mempertahankan arti dari parameter (di kedua arah).

Pertanyaannya kemudian adalah apakah itu layak. Pada Mac, dan beberapa sistem lain, sebuah case dapat dibuat karena mendukung kode kernel 32-bit berarti driver tidak semua harus melakukan pergantian secara bersamaan. Di Linux model pengembangannya berbeda: apa pun di kernel dimigrasikan seperlunya saat perubahan besar dibuat, dan apa pun di luar kernel tidak benar-benar didukung oleh pengembang kernel. Mendukung 32-bit userland dengan kernel 64-bit tentu berguna dan sepadan dengan usaha (setidaknya, itu ketika dukungan x86-64 ditambahkan), saya tidak yakin ada kasus yang dibuat untuk 64-bit pada 32 -sedikit...

Stephen Kitt
sumber
Terima kasih ini sangat membantu, meskipun sekarang Gilles telah menunjukkan jawaban terkait di unix.stackexchange, saya pikir ada lebih banyak yang diinginkan untuk kelengkapan. Dari apa yang saya kumpulkan terkubur di sana di aliran komentar, ternyata ini masih mustahil di armhf karena keterbatasan arsitektur sementara secara teoritis layak untuk i386? Kasus yang harus dibuat: motivasi awal adalah Raspbian, di mana roadmap yayasan adalah mempertahankan satu kernel untuk tahun-tahun mendatang sambil mempertahankan kompatibilitas dengan Pi Zero.
jdonald
3

Snow leopard dapat menjalankan binari 64 bit dalam CPU Intel 64 bit.

Itu juga bisa boot dengan kernel 64 bit ketika efi Anda sudah 64 bit (batch produksi saya dari Macbook "model transisi" pro sudah seperti mesin).

Tidak ada emulasi yang terlibat, Anda hanya membayar biaya kinerja yang lebih kecil ketika mem-boot dalam mode 32 bit.

Dalam CPU 32-bit murni, Anda tidak akan dapat melakukannya, karena mereka tidak tahu bagaimana menafsirkan kode 64 bit. Kecuali Anda meniru dengan perangkat lunak, yang akan memperlambat untuk jenis mesin tertanam yang secara tradisional kurang bertenaga.

Rui F Ribeiro
sumber