Cần gì để chạy phần mềm người dùng 64 bit trên kernel 32 bit?


10

Trên Linux và Windows, tôi đã quen với tình huống tôi yêu cầu kernel 64 bit để có một hệ thống với multiarch / WoW nơi tôi có thể chạy song song phần mềm 32 bit và 64 bit.

Và sau đó, nhiều năm trước, tôi nghĩ rằng MacOS 10.6 Snow Leopard có thể chạy các ứng dụng 64 bit với kernel ở chế độ 32 bit. Điều này có thể bị lãng quên phần lớn vì đây là quá trình chuyển đổi công nghệ một lần. Với phần cứng đi trước đường cong trong không gian di động, theo như tôi biết thì điều này không bao giờ cần thiết trong việc chuyển sang 64-bit cho iOS và Android.

Câu hỏi của tôi: Cần gì để có được khả năng tương tự trong nhân Linux 32 bit (i386 hoặc armhf)?

Tôi hiểu rằng điều này có lẽ không tầm thường. Nếu đúng như vậy, Microsoft có thể đã đưa tính năng này vào Windows XP 32 bit. Các yêu cầu chung mặc dù là gì? Đã bao giờ có một bản vá đề xuất hoặc bằng chứng khái niệm?

Trong thế giới nhúng, tôi nghĩ rằng điều này sẽ đặc biệt hữu ích, vì hỗ trợ 64 bit có thể bị tụt lại phía sau trong một thời gian dài trong trình điều khiển thiết bị.


Bạn có chắc chắn Snow Leopard có thể chạy các ứng dụng 64 bit với kernel 32 bit không? Hạt nhân IIRC cũng được cập nhật trên phần cứng có khả năng lên 64 bit.
muru

5
Đừng bận tâm, bạn đã đúng: superuser.com/a/340591/334516
muru

Câu trả lời:


16

Chạy các ứng dụng 64 bit yêu cầu một số hỗ trợ từ kernel: kernel ít nhất phải thiết lập các bảng trang, bảng ngắt, v.v ... khi cần thiết để hỗ trợ chạy mã 64 bit trên CPU và nó cần lưu toàn bộ 64 bit bối cảnh khi chuyển đổi giữa các ứng dụng (và từ ứng dụng sang kernel và trở lại). Do đó, hạt nhân 32 bit hoàn toàn không thể hỗ trợ không gian người dùng 64 bit.

Tuy nhiên, một kernel có thể chạy mã 32 bit trong không gian kernel, đồng thời hỗ trợ mã 64 bit trong không gian người dùng. Điều đó liên quan đến việc xử lý tương tự như hỗ trợ cần thiết để chạy các ứng dụng 32 bit với kernel 64 bit: về cơ bản, kernel phải hỗ trợ các giao diện 64 bit mà các ứng dụng mong đợi. Ví dụ, nó phải cung cấp một số cơ chế cho mã 64 bit để gọi vào kernel và bảo toàn ý nghĩa của các tham số (theo cả hai hướng).

Câu hỏi sau đó là liệu nó có đáng không. Trên máy Mac và một số hệ thống khác, có thể tạo ra một trường hợp vì hỗ trợ mã hạt nhân 32 bit có nghĩa là tất cả các trình điều khiển không phải thực hiện chuyển đổi đồng thời. Trên Linux, mô hình phát triển là khác nhau: mọi thứ trong kernel đều được di chuyển khi cần thiết khi các thay đổi lớn được thực hiện và mọi thứ bên ngoài kernel không thực sự được các nhà phát triển kernel hỗ trợ. Hỗ trợ vùng người dùng 32 bit với kernel 64 bit chắc chắn rất hữu ích và đáng để nỗ lực (ít nhất, đó là khi hỗ trợ x86-64 được thêm vào), tôi không chắc có trường hợp nào được tạo cho 64 bit trên 32 -bit ...


Cảm ơn điều này rất hữu ích, mặc dù bây giờ Gilles đã chỉ ra câu trả lời liên quan của anh ấy trên unix.stackexchange tôi nghĩ rằng có nhiều mong muốn cho sự hoàn thiện. Từ những gì tôi thu thập được chôn ở đó trong luồng bình luận, rõ ràng điều này vẫn không thể xảy ra trên armhf do những hạn chế về kiến ​​trúc trong khi về mặt lý thuyết có khả thi cho i386 không? Trường hợp cần thực hiện: động lực ban đầu là Raspbian, trong đó lộ trình của nền tảng là duy trì một hạt nhân duy nhất trong nhiều năm tới trong khi vẫn duy trì khả năng tương thích với Pi Zero.
jdonald

3

Con báo tuyết đã có thể chạy nhị phân 64 bit trong CPU Intel 64 bit.

Nó cũng có thể khởi động với kernel 64 bit khi efi của bạn đã 64 bit (lô sản xuất của Macbook "mô hình chuyển đổi" pro đã là một máy như vậy).

Không có giả lập liên quan, bạn chỉ phải trả chi phí hiệu năng nhỏ hơn khi khởi động ở chế độ 32 bit.

Trong các CPU 32 bit thuần túy, bạn sẽ không thể làm điều đó, vì chúng không biết làm thế nào để diễn giải mã 64 bit. Trừ khi bạn đang mô phỏng bằng phần mềm, điều này sẽ làm chậm đối với các loại máy nhúng nhúng truyền thống.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.