it-swarm-vi.tech

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

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?

23
Prabhu

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.

32
Mehrdad Afshari

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 là chủ yế 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ị.

14
Lemmy

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à cái gọi là không gian địa chỉ 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 32 dây nữa 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 bằng tay các dây mới, thêm. Phần mềm của cô ấy 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ế, đó là bình thường không 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ỉ lấy 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 đã 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ủ.

tl; dr CPU 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 được quyết định 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 4 tỷ gấp nhiều lần bộ nhớ so với 4GiB) .

3
Mahmoud Al-Qudsi