Saya penasaran. Apakah mungkin untuk menginstal program 64 bit pada OS 32 bit dengan prosesor 64 bit?
Saya menjalankan Linux pada raspberry pi 3 dan saya mencoba menginstal versi MongoDB yang lebih baru:
armv7l GNU/Linux
PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)"
NAME="Raspbian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=raspbian
ID_LIKE=debian
Jawaban:
Pada prinsipnya ya, tetapi prosesor dan OS harus mendukungnya.
Pada ARMv8, kernel 32-bit (Aarch32) tidak dapat menjalankan proses 64-bit (Aarch64). Ini adalah batasan prosesor.
Ada prosesor lain yang tidak memiliki batasan ini, misalnya dimungkinkan untuk menjalankan proses x86_64 di atas kernel x86_32 pada prosesor x86_64, tetapi beberapa kernel mendukungnya, mungkin karena itu terbatas utilitas (kebanyakan, Anda menyimpan bit RAM di kernel dengan membuatnya 32-bit). Linux tidak mendukungnya, tetapi Solaris mendukungnya.
Anda dapat mempertahankan OS 32-bit yang ada jika menjalankan kernel 64-bit . Kernel Aarch64 Linux dapat menjalankan proses Aarch32. Raspbian tidak mendukung hal ini, jadi Anda harus mempertahankan OS 32-bit dan 64-bit. Anda dapat menggunakan salah satu sebagai OS utama (yaitu yang menjalankan init dan layanan sistem) dan yang lainnya untuk menjalankan program tertentu menggunakan chroot. Lihat Bagaimana cara menjalankan program 32-bit pada Debian / Ubuntu 64-bit? untuk pendekatan praktis.
Perhatikan bahwa Anda harus menginstal semua perpustakaan yang diperlukan oleh program 64-bit. Setiap proses yang diberikan harus seluruhnya 32-bit atau 64-bit sepenuhnya, sehingga Anda tidak dapat menggunakan perpustakaan 32-bit dalam 64-bit yang dapat dieksekusi.
Kecuali Anda memiliki alasan kuat untuk mempertahankan sistem 32-bit, jika Anda perlu menjalankan 64-bit yang dapat dieksekusi, akan lebih mudah untuk menginstal sistem 64-bit.
Perhatikan bahwa satu-satunya hal yang dapat dilakukan oleh program 64-bit tetapi program 32-bit tidak dapat menangani lebih dari sekitar 3GB memori virtual, yang merupakan utilitas terbatas pada sistem dengan 1GB RAM. Anda mungkin mendapatkan manfaat kinerja dari register ekstra yang lebih besar, tetapi Anda juga akan kehilangan kinerja dari akses memori tambahan.
sumber
inc
/dec
register (0x40 .. 0x4F
). Dalam mode panjang (mode 64-bit), ukuran operan default adalah 32, tetapi ukuran alamat default adalah 64.xsave
/xrstor
dalam mode compat dapat menyimpan status vektor penuh, baik. Jadi itu jelas tidak baik didukung atau eksplisit dipenuhi. Mungkin titik entri kernel berjalan dalam mode 64-bit (panjang), dan beralih ke mode 32-bit (compat) sebelum melompat ke seluruh kernel. (sakelar mode x86 hanya membutuhkan afar jmp
dan tidak memengaruhi regs.)Pada beberapa arsitektur, ya. Tetapi tidak pada ARM atau x86.
Anda bisa menggunakan QEMU untuk mengemulasi sistem 64-bit, tetapi Anda tidak mau.
sumber
Tingkatkan hanya kernel Anda menjadi 64-bit, sehingga Anda dapat menjalankan binari 64-bit. Pada dasarnya, ini akan menjalankan seluruh distribusi Anda dalam mode compat 32-bit, dan mongodb 64-bit Anda hanya akan menjadi mode normal.
Tapi itu tidak pantas harganya. Lebih baik untuk mengganti mongodb Anda ke 32 bit. Namun, dalam hal ini ada batasan, bahwa database Anda tidak boleh lebih besar dari 2GB, karena secara langsung memetakan semuanya dalam memori virtual. Jika db Anda lebih besar, hanya pembaruan kernel yang tersisa. (Terima kasih @duskwuff ekstensi!)
Btw, jika db Anda tidak ingin beban yang sangat besar, atau Anda dapat menggunakan beberapa solusi caching sebelumnya (misalnya: yang lain, tetapi 32bit mongo), maka emulasi cpu dapat bekerja. Untuk itu, mulailah googling untuk "qemu qemu-system-x86_64". Meskipun solusi seperti itu mungkin memiliki kebutuhan kerja yang tidak layak dan dapat dianggap aneh di lingkungan yang produktif.
Di tempat Anda, saya akan menggunakan 32 bit mongo jika itu untuk db saya cukup, atau kernel 64 bit jika tidak.
sumber
apt-get install mongodb:i386
atau yang serupa?Saya akan mengatakan itu bukan tidak mungkin tetapi sangat sulit untuk dikelola. Karena OS 32bit biasanya dikemas dengan (dan menerima) 32bit hanya binari dan pustaka, Anda harus mengubah sistem untuk membuatnya bekerja dengan 64bits.
Masalah utama yang akan Anda hadapi dengan RPI3 adalah kurangnya kernel 64bits (setidaknya dengan raspbian).
Singkat cerita: gunakan binari 32 bit dan Anda akan baik-baik saja.
EDIT:
Jika Anda ingin menggunakan kernel 64bits, Anda harus menginstal distro yang mendukung arsitektur ARM64. Anda harus melihat ArchLinux ARM (di sini ), tetapi itu tidak sepenuhnya didukung.
Informasi yang Anda cari ada di bagian bawah tab instalasi.
Anda juga dapat melihat port debian resmi , namun masih ada masalah besar dengan port RPI3, jadi terserah Anda untuk memutuskan apakah itu sepadan dengan masalahnya
sumber
i386
varian, dan itu termasuk kernel 64-bit, yang memungkinkan pustaka dan binari 64-bit untuk diinstal juga. Dukungan ARM di Debian tidak mengizinkan ini pada sistem ARM (tetapi Anda dapat menginstal gabunganarm64
danarmhf
, jika Anda mulai denganarm64
).Saya telah menggunakan kernel 64bit dengan sistem 32bit cukup lama (itu adalah prasyarat minimum untuk menjalankan executable 64bit secara native, ditambah semua pustaka 64bit yang diperlukan). Saya tidak akan merekomendasikan itu. Apa yang akhirnya membuat saya meng-upgrade ke sistem 64bit grosir adalah kesadaran bahwa header ALSA, khususnya yang berkaitan dengan panggilan Midi ioctl, bukan ukuran agnostik, yang berarti bahwa hal-hal yang dikompilasi dalam mode 32bit tidak akan beroperasi dengan baik dengan kernel 64bit.
Tentu saja ini dapat dianggap sebagai bug yang perlu diperbaiki, tetapi laju pengembangan ALSA semuanya membeku dan saya tidak bisa menunggu beberapa tahun untuk dukungan platform campuran untuk diperbaiki (dan dengan cara non-biner yang kompatibel untuk non-campuran dieksekusi) ketika minat pada platform campuran menyusut cepat pula.
Untuk beberapa aplikasi, hal-hal berfungsi dalam mode campuran (ternyata sangat banyak sebenarnya), tetapi jika Anda melakukan lebih dari pembagian dasar interfacing ke kernel, bahkan melalui perpustakaan eksternal, itu hanya terlalu optimis.
sumber