Tại sao Windows 32 bit áp đặt giới hạn không gian địa chỉ quy trình 2 GB, nhưng Windows 64 bit áp đặt giới hạn 4GB?


5

Tôi nhận được điều đó 2^32 = 4,294,967,296và 2GB là dành cho HĐH và 2GB là dành cho quá trình, nhưng tại sao HĐH 64 bit chỉ cung cấp 4GB không gian địa chỉ? Không nên như vậy 2^64 = 18,446,744,073,709,551,615khi chia đều cho HĐH và quá trình nhiều hơn 4 GB?


7
Bạn nên làm rõ rằng bạn đang nói về không gian địa chỉ có sẵn cho các quy trình 32 bit. Các quy trình 64 bit có quyền truy cập vào hơn 4GB không gian địa chỉ.
David Schwartz

1
Ứng dụng 32 bit trên hệ điều hành 64 bit có các giới hạn chính xác giống như ứng dụng 32 bit trên hệ điều hành 32 bit, tất cả các cấu trúc hệ điều hành mà ứng dụng 32 bit yêu cầu đều giống nhau. Các ứng dụng duy nhất nhìn thấy lợi ích thực sự với 64 bit là chính hệ điều hành và các ứng dụng 64 bit.
Mokubai

Câu trả lời:


10

Nếu bạn nhìn vào Giới hạn bộ nhớ cho các bản phát hành Windows

Giới hạn cho không gian địa chỉ ảo chế độ người dùng x64 không phải 4GBnhưng ít nhất là8TB

Một số giải thích biện minh cho 8Tbgiới hạn.

Theo mặc định, exe 32 bit cũng bị giới hạn 2GBở hệ điều hành 64 bit trừ khi nó được điều chỉnh bằngIMAGE_FILE_LARGE_ADDRESS_AWARE


3
Lưu ý rằng các quy trình 64 bit phải đặt IMAGE_FILE_LARGE_ADDRESS_AWARE trong tiêu đề PE của chúng để có được không gian địa chỉ ảo ở chế độ người dùng đó, nếu không, chúng bị giới hạn ở 2 GB như các quy trình 32 bit.
afrazier

5

2 ^ 32 (4GB) là lượng không gian địa chỉ tối đa có thể được xử lý cùng một lúc với các con trỏ 32 bit. Vì vậy, quá trình 32 bit nhất thiết phải giới hạn trong không gian địa chỉ 4GB, bởi vì nó sử dụng con trỏ 32 bit, bất kể hệ điều hành.

Lưu ý rằng đây hoàn toàn là một hạn chế đối với bộ nhớ ảo mà một quá trình có thể đã ánh xạ vào không gian địa chỉ của nó cùng một lúc.


Tại sao 2 gig là giới hạn? một con trỏ 32 bit có thể giải quyết trực tiếp 4 hợp đồng bộ nhớ. Tôi đọc một trang nói rằng bạn phải cẩn thận khi thực hiện toán con trỏ trên các con trỏ với tập bit cao, nhưng ngoài ra, tại sao lại có giới hạn 2 gig? Dường như không ai biết "TẠI SAO?"
Stu

Nhân cần một số không gian địa chỉ và thật xấu khi sử dụng các không gian địa chỉ riêng biệt.
David Schwartz

từ những gì tôi đọc được là để bảo vệ các lập trình viên vô tình thực hiện phép toán con trỏ đã ký và nhận được kết quả không mong muốn nếu một con trỏ có tập bit cao còn con kia thì không. Windows không CẦN 2 hợp đồng không gian địa chỉ. Bạn có ý nghĩa gì khi sử dụng không gian địa chỉ riêng biệt? Đó là những gì bộ nhớ ảo dành cho.
Stu

Đó là lý do các quy trình 32 bit bị giới hạn ở mức 2GB trên các phiên bản Windows 64 bit, trừ khi chúng chỉ ra cụ thể rằng việc cung cấp cho chúng một không gian địa chỉ 4GB là an toàn. Windows 32 bit cần ít nhất 1GB không gian địa chỉ kernel và sử dụng 2GB theo mặc định. Sẽ là quá phức tạp để giải thích ở đây tại sao các hệ điều hành 32 bit phổ biến (bao gồm cả Windows và Linux) không cung cấp cho kernel của họ một không gian địa chỉ riêng và thay vào đó sử dụng phân tách người dùng / kernel, nhưng lý do ngắn là vì nó làm cho nó rất phức tạp cho mã kernel để tương tác với không gian người dùng.
David Schwartz

1
Lý do chính là nếu hạt nhân có không gian địa chỉ riêng, TLB sẽ phải được xóa trên mỗi lần chuyển đổi kernel / người dùng. Ngoài ra, tất cả dữ liệu được sao chép giữa kernel và không gian người dùng sẽ yêu cầu thao tác ánh xạ lại hoặc cửa sổ.
David Schwartz

-2

Tính toán của bạn là chính xác. Chạy hệ thống 64 bit, bạn không cần phải lo lắng về không gian địa chỉ (nhiều hơn hệ thống của bạn sẽ hỗ trợ). Nếu kích thước RAM không như mong muốn, vấn đề sẽ nằm ở một nơi khác. Có lẽ bo mạch chính của bạn bị giới hạn hoặc một số thanh ram không được hỗ trợ / hỏng.


1
Tôi không nghĩ bạn đã hiểu câu hỏi.

1
Điều đó không sao - OP có thể không hiểu câu trả lời.
Daniel R Hicks
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.