Giới hạn bộ nhớ trong các hệ thống 16, 32 và 64 bit


17

Giới hạn bộ nhớ lý thuyết trong các máy 16, 32 và 64 bit như sau:

  • 16 bit = 65,536 byte (64 Kilobyte)

  • 32 bit = 4.294.967.296 byte (4 Gigabyte)

  • 64 bit = 18,446,744,073,709,551,616 (16 Exabyte)

Tôi nhớ từ DOS / Windows 3.11 ngày, bộ nhớ 16 bit có thể được tách thành các phân đoạn, để máy 16 bit có thể truy cập vào bộ nhớ lớn hơn 64 Kilobyte.

Tôi có một máy có bộ nhớ 16GB và đang khởi động kép hệ điều hành 32 bit và hệ điều hành 64 bit. Tôi có thể truy cập tất cả 16GB từ 64 bit, nhưng chỉ 3,21GB ở 32 bit.

Vì vậy, câu hỏi của tôi là, nếu hệ điều hành 16 bit cho phép truy cập bộ nhớ 64KB lớn hơn do phân đoạn bộ nhớ, tại sao các máy 32 bit không tuân theo cùng một dự đoán?

Câu trả lời:


15

Họ làm, hệ thống được gọi là mở rộng địa chỉ vật lý (PAE) . Dưới đây là danh sách các hệ điều hành Windows và bộ nhớ tối đa của chúng, bất kỳ hệ thống 32 bit nào cho phép có hơn 4GB RAM đang sử dụng PAE để truy cập bộ nhớ (Ví dụ: Windows 2003 R2 Datacenter 32 bit cho phép ram 128GB).


Trong thực tế, Windows 8 yêu cầu CPU có khả năng PAE trong các yêu cầu tối thiểu của nó .


Để giải quyết câu hỏi "không có nội dung" của bạn về lý do tại sao HĐH 32 bit của bạn không thể truy cập ram nếu nó tồn tại: Cấp phép. Họ chọn không cho phép RAM trên 4GB cho hệ điều hành 32 bit của mình trừ khi bạn trả tiền cho phiên bản trung tâm dữ liệu (đó là lý do tại sao họ bán phiên bản trung tâm dữ liệu, nếu bạn cần nhiều ram, bạn có thể đủ khả năng chi tiêu nhiều hơn tiền trên hệ điều hành).


Ah tôi đã nghe nói về PAE trước đây nhưng chưa bao giờ điều tra nó. Nó dường như được sử dụng chủ yếu trong kiến ​​trúc máy chủ, do đó dường như không áp dụng cho cài đặt Windows 7 32 bit, vì danh sách chỉ định rằng W7x86 chỉ cho phép tối đa 4GB
Matthew Layton

1
@ 0xC0000022L để công bằng, tôi đã thêm phần giấy phép dưới dạng chỉnh sửa sau bình luận của anh ấy, nhưng do cửa sổ chỉnh sửa 4 phút nên có vẻ như tôi đã đăng nó trước khi anh ấy đăng bình luận.
Scott Chamberlain

1
PAE yêu cầu trình chuyển đổi bảng trang để hoạt động và đó là tốn kém về hiệu suất.
vonbrand

3
Đó là một huyền thoại. Chi phí hoạt động do PAE rất nhỏ. Và nếu bạn không thích PAE, bạn thực sự ghét x64, vì cấu trúc bảng trang trên x64 trông giống như PAE, chỉ với một mức bảng khác được thêm vào đầu và nhiều bit hơn cho PFN trong PxE.
Jamie Hanrahan

1
PAE không bị "xóa trong Windows 7 vì không còn cần thiết", nó vẫn hiện diện trong Windows 7 x86 - theo mặc định nó chỉ ở đó thay vì phải được tùy chọn.
Jamie Hanrahan

13

Thay vì tự mình giải thích, tôi sẽ để một người phải duy trì hạt nhân với sự hỗ trợ của PAE nói theo cách quyến rũ của mình, Linus Torvalds

Ngoài ra, hãy nhớ rằng hỗ trợ PAE trong các phiên bản Windows 32bit mang lại rất nhiều tiền mặt. XP thậm chí sẽ không thể sử dụng hết 4 GiB RAM thông thường, vì MS đã chọn không kích hoạt các tính năng PAE trên nó. Một hạt nhân có liên quan chặt chẽ, Windows 2003 Server, không hỗ trợ PAE. Tuy nhiên, ngay cả ở đó "Phiên bản tiêu chuẩn" của bạn sẽ chỉ hỗ trợ tối đa 4 GiB (nhưng hoạt động xung quanh lỗ bộ nhớ BIOS), trong khi các phiên bản đắt hơn sau đó sẽ cho phép tối đa 64 GiB RAM. Điều tương tự cũng xảy ra với Vista 32 bit .

Tuy nhiên, không phải trong mọi trường hợp là giới hạn này được áp đặt bởi Windows. Nếu đúng như vậy, việc khởi động hạt nhân Linux hỗ trợ PAE vẫn sẽ cho phép bạn sử dụng toàn bộ 4 GiB (hoặc hơn). Không phải vậy, một số nhà sản xuất phần cứng đã chọn áp đặt giới hạn này ở cấp độ BIOS, mặc dù CPU và chipset sẽ có khả năng xử lý PAE.


Chỉ cần một phụ lưu ý: không ai trong số các bộ vi xử lý 64bit x86 dựa trên hiện tại thậm chí có thể giải quyết đầy đủ các không gian địa chỉ 64bit thể chất (để tham khảo xem câu hỏi này và câu trả lời).


Hmm, tại sao tôi lại có ấn tượng rằng Linus thực sự ghét HIGHMEM.SYS và PAE? : P
Karan

2
Tôi hiểu rằng PAE sẽ gây phiền toái cho bất kỳ mã nào cần nhiều hơn một vài hợp đồng làm việc và đối với mã cấp hệ thống cần quản lý nhiều tác vụ của mỗi 2 hợp đồng, nhưng trừ khi một ứng dụng cần nhiều hơn 2 hợp đồng biểu diễn tôi mong đợi PAE sẽ minh bạch. Hơn nữa, tôi nghĩ PAE cũng sẽ tốt hơn so với việc sử dụng con trỏ 64 bit trên toàn cầu trong trường hợp cần 3 hợp đồng RAM đa năng cộng với bộ đệm đĩa lớn hoặc ổ lưu trữ tạm thời.
supercat

Ý kiến ​​của Linus rất lạ. Không có mối quan hệ nào giữa cách thức hoạt động của himem.sys và cách PAE hoạt động. Thật thú vị khi thấy mọi người tranh luận về x64 và chống lại việc đánh địa chỉ PAE ... khi chế độ dài x64 chỉ đơn giản là sử dụng lược đồ PAE và thêm một cấp bảng trang nữa!
Jamie Hanrahan

@JamieHanrahan: ... ít nhất hai trên các hệ thống mới hơn (do ảo hóa), mở ra một số khả năng thú vị. Sự so sánh của anh ấy (Linus) không hoàn toàn đúng, nhưng nếu đó là một khái niệm xa lạ, phép ẩn dụ có thể giúp đỡ :) ... Tôi đoán đó là lý do tại sao anh ấy chọn nó để đưa ra quan điểm của mình.
0xC0000022L

2

CPU 8 bit thường có bus địa chỉ 16 bit. . 8085 CPU.)

8088 và 8086 của Intel có bus địa chỉ bộ nhớ 20 bit (1MB), trong khi 68000 của Motorola có bus địa chỉ 24 bit (16 MB). IIRC, [80] 286 đã nhảy lên một chiếc xe buýt địa chỉ 24 bit. Cả hai sau đó đã mở rộng thành bus địa chỉ 32 bit với [80] 386 và 68020 tương ứng.) Với các chip Pentium, bus địa chỉ được mở rộng thành 64 bit. (Tôi nghĩ rằng các chip PowerPC liên doanh của Motorola / IBM cũng đã sử dụng bus địa chỉ 64 bit.)

Bộ nhớ khả dụng bên dưới và tối đa có thể được CPU truy cập trực tiếp chỉ bị giới hạn bởi các chip phần cứng hỗ trợ (chipset) và HĐH. Bill Gates nổi tiếng trong quá khứ khi tuyên bố rằng không ai cần nhiều hơn 640K RAM, do đó DOS không bao giờ tiến hóa để truy cập trực tiếp nhiều RAM hơn. Với HiMem.sys và EMM386, DOS đã được mở rộng để truy cập thêm bộ nhớ "trên", với EMM386 được sử dụng để truy cập trực tiếp vào tất cả RAM có sẵn. HiMem.sys có độ linh hoạt kém hơn và về cơ bản có thể sử dụng thêm RAM để lưu trữ.

Bộ nhớ vượt quá giới hạn đó yêu cầu MMU (Đơn vị quản lý bộ nhớ) để chia bộ nhớ thành các phân đoạn và ánh xạ nó vào không gian bộ nhớ có thể định địa chỉ của CPU. Đó là cách CoCo 3, Commodore 128 và các máy tính 8 bit khác có thể truy cập hơn 64K RAM.

Bây giờ thuận lợi hơn là sử dụng bộ nhớ ảo để mở rộng giới hạn bộ nhớ vật lý trong quá khứ, mặc dù với các giới hạn được áp đặt bởi HĐH.


1

Bởi vì không có lý do thực tế để làm như vậy. Tiện ích mở rộng địa chỉ vật lý cho phép nhiều chức năng tương tự và việc sử dụng chúng vẫn còn rất hạn chế giữa những người dùng. Trong Windows 3.1 ngày, có những hạn chế không xuất hiện ngày hôm nay.


1
Điều này thực sự không có đủ thông tin để sao lưu báo cáo của bạn. Windows 3.1 là hệ điều hành 16 bit. Người ta phải nhớ rằng vào năm 1992, 2 MB bộ nhớ là hơn 300 đô la.
Ramhound

Bạn nhận xét ngày 22 tháng 2 và lời giải thích của Scott Chamberlin bao gồm rất nhiều những gì tôi đang lái xe. Họ bỏ qua các mô tả về lý do tại sao phân trang mở rộng được sử dụng trong DOS / Win16, nhưng không phải trong Windows sau này. Tôi không bao gồm điều đó, vì nó sẽ không đóng góp trực tiếp vào việc trả lời câu hỏi của OP.
OCDtech

Theo quan điểm của tôi, câu trả lời nên đứng một mình. Nhận xét của bạn thêm thông tin đủ để giải quyết vấn đề của tôi với câu trả lời của bạn.
Ramhound

1
@OCDtech: Mô hình phân đoạn 8086 sẽ cho phép ngôn ngữ hướng đối tượng sử dụng các tham chiếu đối tượng 2 byte để xác định các đối tượng được căn chỉnh trên ranh giới 16 byte, nhưng các ngôn ngữ không được trang bị tốt để sử dụng hiệu quả các phân đoạn. Mô hình 80286 áp đặt chi phí khổng lồ cho các chương trình như vậy và cách nó được mở rộng trên 80386 sẽ khiến cho sơ đồ phân đoạn theo từng đối tượng hoàn toàn vô dụng.
supercat

0

Giới hạn bộ nhớ lý thuyết trong các máy 16, 32 và 64 bit như sau ...

Lỗ hổng cơ bản ở đây là khái niệm rằng "độ rộng bit" của bộ xử lý, thường là kích thước của các thanh ghi mục đích chung của máy, nhất thiết phải giống với chiều rộng của địa chỉ RAM.

Trong x86 với tính năng phân trang được kích hoạt, nhưng không có PAE, các địa chỉ sử dụng mã chương trình và hệ điều hành được Intel gọi là "địa chỉ tuyến tính" - chúng tôi thường gọi chúng là "địa chỉ ảo". Chúng rộng 32 bit. Điều này cho phép không gian địa chỉ ảo 4 GiB.

Nhưng đó là sự trùng hợp ít nhiều, chỉ đơn thuần là một sự giả tạo về định dạng của các mục trong bảng trang mà kích thước của địa chỉ vật lý (RAM) cũng là 32 bit.

Với PAE, cái sau là 36 bit (lúc đầu ... rộng hơn trong các lần thực hiện sau). Vì vậy, chỉ vì nó là, ví dụ, "máy 32 bit" không có nghĩa là địa chỉ bộ nhớ vật lý bị giới hạn ở 32 bit.

Ngành công nghiệp có một lịch sử lâu dài của các máy có "độ rộng bit" không khớp với kích thước địa chỉ vật lý tối đa của chúng. Ví dụ: kiến ​​trúc VAX xác định máy 32 bit và địa chỉ ảo (là địa chỉ được sử dụng bởi mã khi dịch địa chỉ được bật) thực sự rộng 32 bit ... nhưng địa chỉ vật lý của VAX chỉ rộng 30 bit - và một nửa không gian địa chỉ vật lý được dành cho các thanh ghi thiết bị I / O, do đó RAM tối đa chỉ là 512 MiB.

Ngay cả khi không có phần cứng dịch địa chỉ, không nhất thiết là "độ rộng bit" của máy xác định địa chỉ RAM tối đa. Ví dụ: Sê-ri "trên 3000" của CDC là các máy 36 bit. Bạn có nghĩ rằng họ có thể giải quyết 64 GiB RAM? Không khó! Những chiếc máy đó ra đời vào giữa những năm 60! Heck, chúng tôi thậm chí không thể có 64 GB dung lượng đĩa trong những ngày đó. (Dòng CDC 6000 là máy 60 bit. Tôi có cần tiếp tục không?)


Và đừng quên các hệ thống không sử dụng 8 bit cho mỗi ô RAM. (EG: 16/16 = tối đa 128K, 32/32 = Tối đa 16G,
32/64
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.