Hệ điều hành 32 bit có thể chạy trong bộ xử lý 64 bit không?


25

Sự khác biệt giữa HĐH 32 bit và HĐH 64 bit là gì? Hệ điều hành 32 bit có thể chạy trong bộ xử lý 64 bit không?


Nếu bạn đang nói về Windows (và thẻ Win32 dường như chỉ ra điều đó), thì có, hoàn toàn - Vista và Win7 64 bit hỗ trợ hầu hết tất cả các ứng dụng 32 bit thông qua lớp khả năng tương thích - Tôi chưa tìm thấy bất cứ điều gì chưa 'Chỉ hoạt động tốt trên Vista 64-bit (ngoại trừ trình điều khiển cấp hệ thống)
marc_s

5
Câu hỏi đặt ra nhiều hơn là liệu bạn có thể cài đặt Win Vista x86 lên một hộp có bộ xử lý 64 bit hay không, thay vì liệu các ứng dụng x86 có chạy trên Win Vista x64 hay không.
KTC

Câu trả lời:


34

Câu hỏi của bạn là kiến ​​trúc cụ thể. x64 về cơ bản là một phần mở rộng cho kiến ​​trúc x86. Nó hỗ trợ một không gian địa chỉ 64 bit. Nó cung cấp một số hướng dẫn mới và đăng ký mới.

Bạn có thể chạy Windows 32-bit x86 trên máy x64. Lưu ý rằng bạn không thể làm điều này trên các hệ thống 64 bit của Itanium.


16

Bộ xử lý 64 bit có thể chạy cả HĐH 32 và 64 (ít nhất là x64 có thể). Một bộ xử lý 32 bit chỉ có thể chạy 32 nguyên bản.

Sự khác biệt chủ yếu là về kích thước của Con trỏ / Tham chiếu. Trên các máy 64 bit, bạn có thể tham chiếu một địa chỉ trong dải địa chỉ 64 bit (do đó cung cấp cho bạn 2 ^ 64 byte bộ nhớ). Trên 32 bit, bạn chỉ có thể giải quyết 2 ^ 32 byte (= 4 GB). Bây giờ nếu bạn nhìn vào các máy tính hiện tại thì rõ ràng tại sao thế giới đang chuyển sang 64 bit: 32 bit không thể dễ dàng giải quyết tất cả RAM nữa.

Trên x64 (AMD / Intel), bạn có thêm lợi ích 64 bit. CPU có nhiều thanh ghi hơn và do đó cho phép mã hiệu quả hơn.

Trên các kiến ​​trúc khác, sự khác biệt giữa 64 và 32 bit là ít rõ ràng hơn. Ví dụ, Nintendo 64 (hãy nhớ rằng?) Là một máy 64 bit nhưng hầu hết mã của nó là 32 bit. Vì vậy, trong trường hợp đó, 64 bit phục vụ nhiều hơn như một mẹo tiếp thị.


3

Câu trả lời hiện được chấp nhận nói chung là đúng nhưng không cụ thể như vậy. Thực sự không có một thứ gọi là "CPU 32 bit" hay "" CPU 64 bit "- đó là một mô tả chỉ đề cập đến một phần nhỏ trong kiến ​​trúc của CPU. Đặc biệt, nó tham chiếu số của các dòng chọn địa chỉ giữa CPU và bộ nhớ, tức là không gian địa chỉ được gọi là có sẵn cho các hoạt động bộ nhớ.

Vào thời của CPU khi mọi người thường ngồi xuống và dệt (quấn) dây giữa bộ xử lý và bộ nhớ, bạn sẽ phải sử dụng 32 hoặc (theo lý thuyết, vì nó không tồn tại vào thời điểm đó) 64 dây giữa CPU và bộ điều khiển bộ nhớ sẽ được sử dụng để chỉ định địa chỉ bộ nhớ bạn muốn truy cập. Ví dụ: giả sử chúng ta có kiến ​​trúc bộ nhớ 2 bit: gửi 00 sẽ chọn địa chỉ 0, 01 sẽ chọn địa chỉ 1, 10 sẽ chọn địa chỉ 2 và 11 sẽ chọn địa chỉ 3. 2 bit này cung cấp cho chúng tôi 2 ^ 2 byte của RAM (4 byte).

Nếu bạn lấy CPU 32 bit và bạn thêm vào 32 dây giữa CPU và bộ điều khiển bộ nhớ để bạn có thể hỗ trợ nhiều bộ nhớ hơn, giờ bạn đã có "CPU 64 bit" có thể chạy 32 bit mã hoặc mã 64 bit. Điều này có nghĩa là gì và làm thế nào điều này xảy ra? Chà, hãy lấy CPU 2 bit của chúng ta từ phần trước của câu trả lời này và thêm một dây khác, biến nó thành CPU 3 bit, đưa chúng ta từ 4 byte thành 2 ^ 3 hoặc 8 byte RAM.

Mã "2 byte" hiện tại sẽ chạy, thiết lập các giá trị của 2 dây cuối cùng như được chỉ ra ở trên (00-11). Theo mặc định, chúng ta sẽ kết nối thêm kết nối bằng 0, vì vậy thực tế khi mã 2 byte chạy, khi nó chọn 00, thực tế là chọn 000 và khi chọn 11 thì thực sự chọn 011. Dễ dàng.

Bây giờ một lập trình viên muốn viết mã 3 byte "gốc" và viết phần mềm của mình để tận dụng không gian địa chỉ bổ sung. Cô ấy nói với CPU rằng cô ấy biết cô ấy đang làm gì và cô ấy sẽ điều khiển thủ công các dây mới, thêm. Phần mềm của cô biết về (các) dây bổ sung và gửi chính xác 000-111, cho phép cô truy cập đầy đủ vào phạm vi bộ nhớ được hỗ trợ bởi kiến ​​trúc CPU mới này.

Nhưng đó không phải là cách nó phải xảy ra. Trên thực tế, đó thường không phải là cách mọi thứ xảy ra. Khi CPU 64 bit được giới thiệu lần đầu tiên (và có rất nhiều), tất cả chúng đều đi với kiến ​​trúc / thiết kế hoàn toàn mới. Họ không chỉ xử lý thêm 32 dây và nói "bạn đi đây, đây là CPU 64 bit bạn có thể sử dụng ở chế độ 32 bit hoặc 64 bit", nhưng họ nói "Đây là CPU mới của chúng tôi và nó chỉ cần lập trình bằng ngôn ngữ máy hoàn toàn mới này, hoạt động theo cách hoàn toàn mới này, giải quyết một số vấn đề khác biệt thanh lịch hơn nhiều so với CPU 32 bit x86 / i386 cũ từng làm và đó là kiến ​​trúc 64 bit nguyên bản. . "

Đó là câu chuyện về Intel Itanium, hiện được biết đến với cái tên "Itanic" vì nó đã chìm xuống ồ ạt như thế nào. Nó được cho là để báo trước trong kỷ nguyên 64 bit mới, và đó là điều đáng chú ý. Hướng dẫn về độ dài thay đổi, bộ nhớ cache lớn, không gian địa chỉ 64 bit, hàng tấn đăng ký, siêu thú vị, siêu tuyệt vời và siêu khó để thuyết phục mọi người biên dịch lại hoặc viết lại mã 20 năm cho. Điều này đã trở lại khi AMD và Intel thực sự cạnh tranh và AMD có ý tưởng tuyệt vời khi nói rằng "hãy quên tất cả điều này 'giải quyết tất cả các vấn đề của thế giới' và chỉ cần thêm 32 dây vào i386 và tạo ra 64-bit tương thích 32-bit CPU bit "và kiến ​​trúc CPU x86_64 đã ra đời.

Trên thực tế, nếu bạn nhìn vào tên và nguồn nhân cho các hệ điều hành chính (Linux, Windows, BSD, v.v.), bạn sẽ thấy chúng tràn ngập các tham chiếu đến CPU AMD64 và kiến ​​trúc AMD64. AMD đã đưa ra một chiến lược chiến thắng để giúp mọi người chuyển sang thế giới 64 bit trong khi vẫn duy trì khả năng tương thích với các ứng dụng 32 bit, theo cách mà HĐH 32 bit có thể chạy trên phần cứng 64 bit hoặc thậm chí các ứng dụng 32 bit có thể chạy trên HĐH 64 bit trên phần cứng 64 bit. Intel đã đi theo bộ sớm hơn thay vì kiến ​​trúc "Intel EM64T" (về cơ bản giống với AMD64) và x86_64 đã chiến thắng trong khi Itanic và các hãng khác như MIPS64 và ALPHA64 không còn xuất hiện trên thị trường máy tính để bàn / máy chủ.

Các CPU tl; dr amd64 aka x86_64 được thiết kế để tương thích với cả mã và nhân 32 và 64 bit, nhưng hầu hết các CPU 64 bit đều không tương thích ngược theo cùng một cách. CPU 32 bit có thể truy cập tối đa 4GiB bộ nhớ, trong khi CPU 64 bit có thể truy cập 16 EiB tuyệt đẹp (16 × 1024 ^ 6 byte, hoặc gấp 4 tỷ lần bộ nhớ so với 4GiB).


1
Bạn có một vài lỗi thực tế: 1) itanium không đưa ra các hướng dẫn về độ dài thay đổi (mọi x86 đều có chúng); nó đã thêm các hướng dẫn từ rất dài, có khả năng hoạt động đồng thời trên nhiều số lượng 64 bit. 2) x86_64 không chỉ tát vào nhiều dòng địa chỉ hơn; nó cũng đã thêm một loạt các thanh ghi bổ sung và mở rộng tất cả các thanh ghi (và ALU hoạt động trên chúng) từ 32 đến 64 bit. So sánh điều này với 8086/8088, đã thêm 4 dòng địa chỉ và thanh ghi bộ chọn phân đoạn, nhưng giữ tất cả chúng ở mức 16 bit, giống như 8080 trước nó.
psusi

-1

Cả HĐH 32 và 64 bit đều có thể chạy trên bộ xử lý 64 bit, nhưng HĐH 64 bit có thể sử dụng toàn bộ sức mạnh của bộ xử lý 64 bit (các thanh ghi lớn hơn, nhiều hướng dẫn hơn) - nói ngắn gọn là nó có thể làm được nhiều việc hơn cùng một lúc. Bộ xử lý 32 bit chỉ hỗ trợ HĐH Windows 32 bit.


3
Điều này nói chung là không chính xác, mặc dù đúng cho x64.
ChrisInEd hôm

1
Bộ xử lý 32 bit sẽ chạy bất kỳ hệ điều hành nào được thiết kế để chạy trên kiến ​​trúc bộ xử lý như vậy.
Sáp

Hệ điều hành x86 32 bit rõ ràng không thể chạy trên ARM64, do đó, 32 and 64 bit OS can run on a 64 bit processornói chung là không chính xác
phuclv

@ Phúc Có thể có bộ xử lý 64 bit, không hỗ trợ bộ đôi 32 bit của họ. Tuy nhiên, bạn sử dụng logic sai trong đối số của bạn. SunOS 4.4.1 trên MicroSparc 32 bit cũng sẽ không chạy trên ARM32. Sử dụng logic của bạn có nghĩa là, nói chung không chính xác rằng HĐH 32 bit có thể chạy trên bộ xử lý 32 bit. Nếu tôi bỏ qua lẽ thường như bạn, tôi có thể lập luận rằng HĐH ARM 32 bit chạy trên Intel i386 / x64, vì các nhà phát triển Android chạy hình ảnh ARM Android trên máy Wintel của họ. Tất nhiên HĐH dành cho gia đình bộ xử lý phù hợp và tất nhiên HĐH chạy trên phần cứng vật lý chứ không phải giả lập (đủ để nói)
Tino
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.