Máy OS 32 bit có thể sử dụng hết RAM 8GB + tệp trang 20GB không?


98

Những gì tôi hiểu về HĐH 32 bit là, địa chỉ được thể hiện bằng 32 bit, vì vậy, hầu hết các HĐH có thể sử dụng 2 không gian bộ nhớ 32 = 4G - Tôi giả sử đơn vị là byte, vì vậy 4GB.

Điều này có nghĩa là nếu bất kỳ máy nào có HĐH 32 bit (có thể là Windows hoặc Unix) có tổng dung lượng RAM + 4GB trang trên đĩa cứng, ví dụ: RAM 8GB và tệp trang 20 GB, bộ nhớ của nó sẽ không bao giờ bị "sử dụng hết "?

Bằng cách "sử dụng hết" Tôi có nghĩa là tăng RAM hoặc tệp trang sẽ không giúp hiệu suất; tất nhiên, luôn có khả năng một ứng dụng sẽ tiếp tục yêu cầu bộ nhớ từ HĐH nhưng không thành công.

Tương tự, nếu máy HĐH 32 bit này có RAM 2 GB và tệp trang 2 GB, việc tăng kích thước tệp trang sẽ không giúp hiệu suất. Điều này có đúng không?


2
Một lưu ý phụ, nếu bạn có RAM hơn 4GB và chỉ có HĐH 32 bit, bạn có thể tạo Đĩa RAM. Đây là một ổ cứng trong RAM của bạn và bạn có thể sử dụng RAM chưa sử dụng / chưa được giải nén để đặt nó vào.
Simon Verbeke

10
Bạn không thể. Một ramdisk vẫn phải được tạo thông qua HĐH, nếu HĐH không thể sử dụng bộ nhớ, bạn cũng không thể tạo ramdisk ở đó. (Trừ khi bios của bạn có thể tạo ramdisk, điều này rất hiếm).
AVee

1
Câu trả lời ngắn gọn là có". Mặc dù thông thường, một quy trình được cung cấp không gian địa chỉ 32 bit để sử dụng, nhưng bản thân HĐH có thể sử dụng nhiều hơn thế (bằng cách chuyển đổi ngân hàng như chúng tôi đã làm trong thập niên 80 hoặc bằng trường thủ thuật mở rộng địa chỉ như PAE của Intel. Ngoài ra, hãy nhớ rằng bạn chạy nhiều hơn một chương trình tại một thời điểm, có thể bao gồm nhiều hơn một quy trình (Chrome đặt các tab trong các quy trình khác nhau). Chính hệ điều hành sẽ sử dụng bộ nhớ cho những thứ như lưu trữ dữ liệu từ các đĩa cố định cục bộ để bạn có thể truy cập dữ liệu nhanh hơn đã sử dụng.
rbanffy

Câu trả lời:


145

Những gì tôi hiểu về HĐH 32 bit là, địa chỉ được thể hiện bằng 32 bit, vì vậy, hầu hết các HĐH có thể sử dụng 2 ^ 32 = 4GB dung lượng bộ nhớ

Hầu hết các quá trình có thể giải quyết là 4GB. Bạn có khả năng nhầm lẫn bộ nhớ với không gian địa chỉ . Một quá trình có thể có nhiều bộ nhớ hơn không gian địa chỉ. Điều đó là hoàn toàn hợp phápkhá phổ biến trong xử lý video và các ứng dụng cần nhiều bộ nhớ khác. Một quá trình có thể được phân bổ hàng chục GB bộ nhớ và trao đổi nó vào và ra khỏi không gian địa chỉ theo ý muốn. Mỗi lần chỉ có 2 GB có thể đi vào không gian địa chỉ người dùng .

Nếu bạn có một nhà để xe bốn xe tại nhà, bạn vẫn có thể sở hữu năm mươi chiếc xe. Bạn không thể giữ tất cả chúng trong nhà để xe của bạn. Bạn phải có bộ lưu trữ phụ trợ ở một nơi khác để lưu trữ ít nhất 46 trong số chúng; Những chiếc xe bạn giữ trong nhà để xe của bạn và những chiếc bạn giữ trong bãi đậu xe xuống đường là tùy thuộc vào bạn.

Điều này có nghĩa là bất kỳ HĐH 32 bit nào, dù là Windows hay unix, nếu máy có tệp RAM + trang trên đĩa cứng hơn 4GB, ví dụ RAM 8GB và tệp trang 20 GB, sẽ không bao giờ có "bộ nhớ sử dụng hết"?

Hoàn toàn không có nghĩa là như vậy. Một quá trình duy nhất có thể sử dụng nhiều bộ nhớ hơn thế! Một lần nữa , lượng bộ nhớ mà một tiến trình sử dụng gần như hoàn toàn không liên quan đến lượng không gian địa chỉ ảo mà một tiến trình sử dụng. Giống như số lượng xe bạn giữ trong nhà để xe của bạn hoàn toàn không liên quan đến số lượng xe bạn sở hữu.

Hơn nữa, hai quá trình có thể chia sẻ các trang bộ nhớ không riêng tư . Nếu hai mươi tiến trình đều tải cùng một DLL, thì tất cả các quy trình đều chia sẻ các trang bộ nhớ cho mã đó. Họ không chia sẻ không gian địa chỉ bộ nhớ ảo , họ chia sẻ bộ nhớ .

Quan điểm của tôi, trong trường hợp không rõ ràng, là bạn nên ngừng nghĩ về bộ nhớ và không gian địa chỉ là điều tương tự, bởi vì chúng hoàn toàn không giống nhau.

nếu máy HĐH 32 bit này có RAM 2 GB và tệp trang 2 GB, việc tăng kích thước tệp trang sẽ không giúp hiệu suất. Điều này có đúng không?

Bạn có năm mươi chiếc xe hơi và một nhà để xe bốn xe, và một bãi đậu xe 100 xuống đường. Bạn tăng kích thước của bãi đậu xe lên 200 điểm. Có bất kỳ chiếc xe nào của bạn nhanh hơn do bạn hiện có 150 chỗ đậu xe thay vì 50 chỗ đậu xe thêm không?


26
Tôi tìm thấy câu trả lời này để không giải quyết câu hỏi trong tầm tay và gần như là lừa dối tại các điểm.
Rig

48
@Rig: Tuyệt vời, tôi rất vui khi nghe những lời chỉ trích mang tính xây dựng của bạn. Bây giờ là cơ hội của bạn để viết một câu trả lời tốt hơn và cho chúng tôi thấy loại câu trả lời mà bạn nghĩ là ít lừa dối và thích hợp hơn.
Eric Lippert

4
@BlueRaja: Tôi nghi ngờ rằng bạn đang nhầm lẫn bộ nhớ vật lý với bộ nhớ . Bộ nhớ vật lý chỉ là một tối ưu hóa cho phép truy cập vào bộ nhớ nhanh hơn. Giống như bộ nhớ cache của bộ xử lý là một tối ưu hóa cho phép truy cập vào bộ nhớ nhanh hơn. Bộ nhớ dành cho tất cả các mục đích và không gian mục đích được dành riêng trong tệp trang. Việc một trang nhất định trong tệp trang có (1) được ánh xạ tới địa chỉ bộ nhớ ảo hay (2) được sao chép từ đĩa sang bộ nhớ vật lý không liên quan đến câu hỏi liệu nó có được phân bổ hay không.
Eric Lippert

4
@BlueRaja: Bài viết của Raymond Chen về chủ đề này có thể giúp ích. Anh ta chỉ ra cách phân bổ 4GB ra khỏi tệp trang; đó là bộ nhớ mà quá trình sở hữu . Quá trình không thể giải quyết toàn bộ mọi thứ cùng một lúc, nhưng nó có thể giải quyết bất kỳ trang nào bằng cách ánh xạ một trang vào một trang VM không sử dụng, sử dụng nó trong một thời gian, sau đó loại bỏ nó. blog.msdn.com/b/oldnewthing/archive/2004/08/10/211890.aspx
Eric Lippert

3
Câu trả lời này sẽ rõ ràng hơn, Eric, nếu bạn đã tuyên bố rõ ràng rằng Windows (và các hệ điều hành khác) cho phép bạn dự trữ bộ nhớ của bộ nhớ mà không thực sự có nó trong không gian địa chỉ ảo của bạn, và sau đó trả lời câu hỏi rõ ràng giải quyết nó? Tôi nghĩ rằng câu trả lời cho câu hỏi đó là có một số loại ID trang mà bạn sử dụng để tham chiếu nó để đưa nó vào không gian địa chỉ ảo, và sau đó bạn có thể giải quyết nó ở đó, nhưng tôi không biết, và tôi không biết câu trả lời của bạn không nói :)
Timwi

67

Đúng là CPU chỉ có thể giải quyết tối đa 4Gb RAM. Tuy nhiên, CPU hiện tại sử dụng MMU ( Đơn vị quản lý bộ nhớ ) để dịch địa chỉ bộ nhớ dành riêng cho quy trình thành địa chỉ bộ nhớ vật lý.

MMU này được sử dụng cho tất cả các loại thủ thuật khác nhau, từ cách ly bộ nhớ (quy trình A không thể thao tác bộ nhớ của quy trình B) đến chia sẻ bộ nhớ (quy trình A có thể truy cập vào cùng vùng nhớ vật lý như quy trình B và có thể trao đổi dữ liệu theo cách này).

Mặc dù CPU 32 bit chỉ hỗ trợ bộ nhớ 4Gb cho mỗi tiến trình, nhưng nó có thể giải quyết tới 64Gb RAM khi sử dụng Tiện ích mở rộng địa chỉ vật lý . Điều này cho phép tiến trình A sử dụng 4Gb bộ nhớ đầu tiên, trong khi tiến trình B sử dụng 4Gb tiếp theo. Tổng cộng, hơn 4Gb bộ nhớ vật lý được sử dụng, nhưng tổng dung lượng bộ nhớ mà một quá trình sử dụng vẫn được giới hạn ở mức 4Gb .

PAE được hỗ trợ trên Linux kể từ phiên bản kernel 2.3.23 và trên một số hương vị 32-bit của Windows Server, nhưng không phải trên Windows XP, Vista hoặc 7-bit 32-bit.

Nếu CPU của bạn không hỗ trợ PAE, bạn sẽ bị giới hạn ở 4GB bộ nhớ vật lý (hoặc ít hơn tùy thuộc vào các yếu tố khác).

Xin lưu ý rằng hệ điều hành của bạn vẫn có thể xóa các phần của bộ nhớ vật lý vào đĩa (tệp trang) bất kể CPU hỗ trợ PAE. Điều này đảm bảo bạn có thể bắt đầu nhiều quy trình sử dụng nhiều hơn 4Gb kết hợp. Tác động duy nhất mà PAE có là liệu bạn có thể giữ 4Gb của tiến trình B trong bộ nhớ vật lý trong khi chạy tiến trình A.


điều đó có nghĩa là nếu nó không hỗ trợ, thì những gì tôi nói ở trên có đúng không?

10
Windows XP không hỗ trợ PAE (bắt đầu với SP2, tôi nghĩ vậy), nhưng bỏ qua RAM vượt quá 4GB ngay cả khi máy hỗ trợ PAE; thấy ở đây . Nó được sử dụng để ngăn chặn thực thi dữ liệu dựa trên phần cứng - bit NX / XD chỉ khả dụng trong mục nhập bảng trang PAE, không phải là mục nhập bảng trang "thông thường".
Wyzard

Chipset cũng có thể là một yếu tố hạn chế về số lượng bộ nhớ có thể được hỗ trợ / sử dụng bất kể bạn chọn hệ điều hành hay hack nào.
Moab

5
Tôi muốn nói thêm rằng lý do tại sao các phiên bản 32 bit dành cho người tiêu dùng không hỗ trợ> 4GB ram là do một số lượng đáng kể các ổ đĩa cứng được tìm thấy không hoạt động chính xác với nhiều bộ nhớ đó; và vì vào thời điểm đó, 4GB ram là cực kỳ hiếm bên ngoài các máy chủ / máy trạm cực kỳ cao cấp mà hầu hết các công ty duy trì trình điều khiển đều không quan tâm đến việc chi tiền để cập nhật trình điều khiển chỉ được sử dụng bởi 0,1% cơ sở khách hàng của họ.
Dan Neely

6
@DanNeely hệ điều hành không có hỗ trợ cho bộ nhớ, nó hạn chế do vấn đề cấp phép . Mặc dù tôi đồng ý rằng đây là hack của bên thứ ba, nhưng nó chỉ dành cho các biến thể của người tiêu dùng Windows. Các bản phân phối Windows dựa trên máy chủ, bắt đầu từ Windows 2000 , đã hỗ trợ hơn 4GB bộ nhớ (tham chiếu liên kết đầu tiên).
Đột phá

15

Nói riêng về các biến thể Windows 32 bit, họ đã hỗ trợ hơn 4GB RAM kể từ các biến thể Windows 2003 (và bạn cũng có thể nhận được hack kernel cho Windows 7 để cho phép bạn sử dụng tất cả RAM trong 32 bit). Tuy nhiên, điều này có chi phí, như bạn đã nêu trong phần đầu tiên của câu hỏi của bạn.

Trong hệ điều hành 32 bit, kích thước của một con trỏ (địa chỉ bộ nhớ) giống như độ dài từ của CPU, 32 bit, cho phép (như bạn đã đề cập) không gian bộ nhớ 2 ^ 32 = 4GB. Windows cũng có cách tiếp cận "bộ nhớ ảo" cho các ứng dụng, vì vậy mỗi ứng dụng có không gian bộ nhớ riêng.

Vì mỗi con trỏ chỉ rộng 32 bit, nên các con trỏ của mỗi ứng dụng chỉ có thể giải quyết tối đa 4GB bộ nhớ, mặc dù hệ thống có thể hỗ trợ nhiều hơn 4GB RAM. Theo tôi biết, đây là sự cảnh báo duy nhất để sử dụng hơn 4GB RAM trong hệ điều hành 32 bit. Tổng cộng, bạn có thể có nhiều ứng dụng sử dụng hơn 4GB RAM kết hợp, nhưng bất kỳ một quy trình cụ thể nào cũng chỉ có thể phân bổ / truy cập tối đa 4GB.


Quay lại câu hỏi của bạn, giả sử bạn có một chương trình sử dụng 2GB RAM. Nếu bạn có 10 phiên bản của chương trình này, thì đó là 20 GB. Tất cả 8GB RAM của bạn sẽ được sử dụng hết, cũng như 12GB trang khác. Vì vậy, có, trong các hệ điều hành 32 bit, việc sử dụng hết bộ nhớ này là không thể.

nếu máy HĐH 32 bit này có RAM 2 GB và tệp trang 2 GB, việc tăng kích thước tệp trang sẽ không giúp hiệu suất. điều này có đúng không

Tăng kích thước tệp trang thường sẽ không tăng hiệu suất (trừ khi RAM và tệp trang của bạn được đặt ở mức tối thiểu tuyệt đối hoặc đặt quá thấp máy tính của bạn liên tục bị giật). Tuy nhiên, nó sẽ ngăn máy tính của bạn hết bộ nhớ (ảo). Bất cứ khi nào bất cứ điều gì cần được thanh lọc vào trang, bạn đều đã đạt được hiệu suất rất lớn (vì ổ cứng là đơn đặt hàng có cường độ chậm hơn RAM của bạn).


Trong số 4GB không gian địa chỉ mà mỗi quá trình có được, chỉ có 2 GB thực sự có sẵn cho chương trình sử dụng; 2GB khác được dành riêng để sử dụng bởi kernel. Các / 3GB tùy chọn khởi động có thể cho phép một số chương trình để sử dụng RAM nhiều hơn nữa.
Wyzard

1
@BreakENC: "Tăng kích thước tệp trang sẽ không bao giờ tăng hiệu suất" Tôi không nghĩ điều này là đúng. Ví dụ: nếu có nhiều trao đổi hơn, HĐH có thể trao đổi mạnh hơn dữ liệu chương trình không sử dụng và sử dụng RAM miễn phí, ví dụ như bộ nhớ đệm trên đĩa. Trong một số cấu hình, điều này có thể mang lại hiệu suất tốt hơn. Có một câu trả lời hay trên ServerFault về lý do tại sao một pagefile lại quan trọng, nó liên quan đến những vấn đề này: serverfault.com/questions/23621/
Kẻ

2
Hãy cẩn thận với các tuyên bố về chăn như "Tăng kích thước tệp trang sẽ không bao giờ tăng hiệu suất" , điều này hoàn toàn có thể xảy ra đối với một tệp trang quá nhỏ để dẫn đến việc đập đĩa nhiều hơn so với việc có tệp trang lớn hơn! Xem câu trả lời và ý kiến ​​trong câu hỏi này .
Đánh dấu gian hàng

1
@sleske Điểm hay, tôi đã cập nhật nó thành một loại "thường không". Mặc dù tôi đồng ý rằng nó có thể tạo ra sự khác biệt lớn trong một máy chủ, nhưng đối với hầu hết mọi người, điểm tôi đang cố gắng vượt qua là họ sẽ tốt hơn nếu chỉ nhận được nhiều RAM hơn (vì khi bạn phân trang, hiệu suất khá chậm. như nó có thể nhận được).
Đột phá

-1

Khi bộ xử lý được gọi là 32 bit, điều đó có nghĩa là nó có thể hoạt động với các số 32 bit bằng một lệnh duy nhất. Điều này ít liên quan đến chiều rộng của bus địa chỉ của nó, mà trên kiến ​​trúc Intel là 36 bit kể từ khi Pentium Pro phát hành năm 1995.

Giới hạn 4GB nổi tiếng xuất phát từ thực tế là hầu hết các phần mềm PC sử dụng mô hình bộ nhớ phẳng trong đó mỗi byte bộ nhớ có thể được xử lý bằng một con trỏ. Vì một con trỏ phải vừa với một thanh ghi được sử dụng và các thanh ghi có chiều rộng 32 bit, nên bạn bị giới hạn ở 4GB.


Điều này là không chính xác, như đã chỉ ra trong các câu trả lời trước đó ở trên.
ChrisInEd hôm

Bạn có thể chỉ ra một sự thật cụ thể rằng tôi đã sai?
Dmitry Grigoryev

1
Một tiến trình duy nhất có thể sử dụng hơn 4 GB. Cụ thể, các câu trả lời trước chỉ ra "Một quy trình có thể có nhiều bộ nhớ hơn không gian địa chỉ".
ChrisInEd hôm

2
Xem ví dụ: blog.superuser.com/2011/04/23/ Từ bây giờ, chắc chắn, bạn không thể sử dụng đồng thời hơn 4 GB, nhưng một quy trình duy nhất có thể hủy ánh xạ và sắp xếp lại bộ nhớ, vì vậy có thể sử dụng nhiều hơn 4 GB trong một quy trình, chỉ cần một chút kế toán. Bài đăng trên blog là khá cụ thể của Windows. Tôi đã chạy các máy chủ cơ sở dữ liệu với> 4 GB bộ nhớ được phân bổ, trên các bản cài đặt Linux 32 bit. Ngày nay, dĩ nhiên, bạn chỉ chạy Linux 64-bit.
ChrisInEd hôm

1
OK, tôi xin lỗi. Tôi đã không nghĩ về khả năng có mmapthêm bộ nhớ.
Dmitry Grigoryev
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.