Bisakah mesin 32-bit OS menggunakan semua file halaman 8GB RAM + 20GB?

98

Yang saya pahami tentang OS 32-bit adalah, alamatnya diekspresikan dalam 32 bit, jadi paling-paling OS itu bisa menggunakan 2 32 = ruang memori 4G - Saya berasumsi unitnya byte, jadi 4GB.

Apakah ini berarti jika mesin apa pun dengan OS 32-bit (baik Windows atau Unix) memiliki lebih dari 4GB total RAM + file halaman pada hard disk, misalnya 8GB RAM dan 20GB file halaman, memorinya tidak akan pernah "habis" "?

Dengan "habis" maksud saya bahwa meningkatkan RAM atau file halaman tidak akan membantu kinerja; tentu saja, selalu memungkinkan aplikasi akan terus meminta memori dari OS tetapi gagal.

Demikian pula, jika mesin OS 32-bit ini memiliki 2GB RAM dan 2GB halaman file, meningkatkan ukuran file halaman tidak akan membantu kinerja. Apakah ini benar?

athos
sumber
2
Sebagai catatan, jika Anda memiliki lebih dari 4GB RAM, dan hanya OS 32 bit, Anda dapat membuat RAM Disk. Ini adalah hard drive dalam RAM Anda, dan Anda dapat menggunakan RAM yang tidak terpakai / tidak tertangani untuk meletakkannya.
Simon Verbeke
10
Kamu tidak bisa Ramdisk masih harus dibuat melalui OS, jika OS tidak dapat menggunakan memori Anda juga tidak dapat membuat ramdisk. (Kecuali jika bios Anda dapat membuat ramdisk, yang jarang terjadi).
AVee
1
Jawaban singkatnya adalah "ya". Meskipun biasanya sebuah proses diberi ruang alamat 32 bit untuk digunakan, OS itu sendiri dapat menggunakan lebih dari itu (baik dengan beralih bank seperti yang kami lakukan di tahun 80-an atau dengan alamat sekolah trik sulap sebagai PAE Intel. Juga, ingat Anda menjalankan lebih dari satu program pada satu waktu, yang dapat terdiri dari lebih dari satu proses (Chrome menempatkan tab dalam proses yang berbeda). Dan OS itu sendiri akan menggunakan memori untuk hal-hal seperti caching data dari disk tetap lokal sehingga Anda mengalami akses lebih cepat ke data yang sudah digunakan
rbanffy

Jawaban:

145

Apa yang saya mengerti tentang OS 32-bit adalah, alamatnya diekspresikan dalam 32 bit, sehingga paling banyak OS bisa menggunakan 2 ^ 32 = 4GB ruang memori

Yang paling bahwa proses dapat mengatasi adalah 4GB. Anda berpotensi membingungkan memori dengan ruang alamat . Suatu proses dapat memiliki lebih banyak memori daripada ruang alamat. Itu sangat legal dan sangat umum dalam pemrosesan video dan aplikasi intensif memori lainnya. Suatu proses dapat dialokasikan puluhan GB memori dan menukar ke dalam dan keluar dari ruang alamat sesuka hati. Hanya 2 GB yang bisa masuk ke ruang alamat pengguna sekaligus.

Jika Anda memiliki garasi empat mobil di rumah Anda, Anda masih dapat memiliki lima puluh mobil. Anda tidak bisa menyimpan semuanya di garasi Anda. Anda harus memiliki penyimpanan tambahan di tempat lain untuk menyimpan setidaknya 46 di antaranya; mobil mana yang Anda simpan di garasi dan yang Anda simpan di tempat parkir terserah Anda.

Apakah ini berarti OS 32-bit, baik itu Windows atau unix, jika mesin memiliki file halaman RAM pada hard disk lebih dari 4GB, misalnya 8GB RAM dan file halaman 20GB, tidak akan pernah ada "memori habis"?

Tentu bukan berarti itu. Satu proses dapat menggunakan lebih banyak memori dari itu! Sekali lagi jumlah memori yang digunakan proses hampir sepenuhnya tidak terkait dengan jumlah ruang alamat virtual yang digunakan proses. Sama seperti jumlah mobil yang Anda simpan di garasi Anda sama sekali tidak terkait dengan jumlah mobil yang Anda miliki.

Selain itu, dua proses dapat berbagi halaman memori non-pribadi . Jika dua puluh proses semua memuat DLL yang sama, semua proses berbagi halaman memori untuk kode itu. Mereka tidak berbagi ruang alamat memori virtual , mereka berbagi memori .

Maksud saya, kalau-kalau tidak jelas, adalah bahwa Anda harus berhenti memikirkan memori dan ruang alamat sebagai hal yang sama, karena mereka sama sekali tidak sama.

jika mesin OS 32-bit ini memiliki 2GB RAM dan 2GB halaman file, meningkatkan ukuran file halaman tidak akan membantu kinerja. Apakah ini benar?

Anda memiliki lima puluh mobil dan garasi empat mobil, dan tempat parkir 100 mobil di jalan. Anda meningkatkan ukuran tempat parkir menjadi 200 tempat. Apakah ada mobil Anda yang lebih cepat karena Anda sekarang memiliki 150 tempat parkir tambahan daripada 50 tempat parkir tambahan?

Eric Lippert
sumber
26
Saya menemukan jawaban ini untuk tidak menjawab pertanyaan yang ada dan hampir menipu poin.
Rig
48
@Rig: Luar biasa, saya senang mendengar kritik membangun Anda. Sekarang adalah kesempatan Anda untuk menulis jawaban yang lebih baik dan tunjukkan pada kami jenis jawaban yang menurut Anda kurang menipu dan lebih relevan.
Eric Lippert
4
@ BlueRaja: Saya menduga bahwa Anda membingungkan memori fisik dengan memori . Memori fisik hanyalah pengoptimalan yang memungkinkan akses lebih cepat ke memori. Sama seperti cache prosesor adalah pengoptimalan yang memungkinkan akses lebih cepat ke memori. Memori untuk semua maksud dan ruang yang disediakan untuk file halaman. Apakah halaman yang diberikan dalam file halaman (1) dipetakan ke alamat memori virtual atau (2) disalin dari disk ke memori fisik tidak relevan dengan pertanyaan apakah itu dialokasikan atau tidak.
Eric Lippert
4
@BlueRaja: Artikel Raymond Chen tentang masalah ini mungkin bisa membantu. Dia menunjukkan cara mengalokasikan 4GB dari file halaman; itu adalah memori yang dimiliki proses . Tentu saja proses tidak dapat mengatasi semuanya sekaligus, tetapi dapat mengatasi halaman apa pun dengan memetakan halaman ke halaman VM yang tidak digunakan, menggunakannya untuk sementara waktu, dan kemudian membuangnya. blogs.msdn.com/b/oldnewthing/archive/2004/08/10/211890.aspx
Eric Lippert
3
Jawaban ini akan lebih jelas, Eric, jika Anda telah menyatakan secara eksplisit bahwa Windows (dan OS lainnya) memungkinkan Anda untuk "menyimpan" memori tanpa benar-benar memilikinya di ruang alamat virtual Anda, dan kemudian menjawab pertanyaan yang jelas "lalu bagaimana Anda mengatasinya? ". Saya pikir jawabannya adalah "ada semacam ID Halaman yang Anda gunakan untuk merujuknya agar dapat mem-page-nya ke ruang alamat virtual, dan kemudian Anda bisa mengatasinya di sana", tapi saya tidak tahu, dan jawaban Anda tidak mengatakan :)
Timwi
67

Memang benar bahwa CPU hanya dapat mengatasi RAM maksimal 4Gb. Namun, CPU saat ini menggunakan MMU ( Memory management unit ) untuk menerjemahkan alamat memori khusus proses ke alamat memori fisik.

MMU ini digunakan untuk semua jenis trik yang berbeda, dari isolasi memori (proses A tidak dapat memanipulasi memori proses B) hingga berbagi memori (proses A dapat mengakses wilayah memori fisik yang sama dengan proses B dan dapat bertukar data dengan cara ini).

Meskipun CPU 32-bit hanya mendukung memori 4Gb per proses, ia dapat mengatasi hingga 64Gb RAM saat menggunakan Ekstensi Alamat Fisik . Ini memungkinkan proses A untuk menggunakan memori 4Gb pertama, sementara proses B menggunakan 4Gb berikutnya. Secara total, lebih dari 4Gb memori fisik digunakan, tetapi jumlah total memori yang digunakan proses tunggal masih dibatasi pada 4Gb .

PAE didukung di Linux sejak kernel versi 2.3.23 dan pada beberapa rasa Windows Server 32-bit, tetapi tidak pada Windows XP 32-bit, Vista atau 7.

Jika CPU Anda tidak mendukung PAE, Anda akan dibatasi hingga 4GB memori fisik (atau kurang tergantung pada faktor lain).

Harap dicatat sistem operasi Anda masih dapat mengusir bagian memori fisik ke disk (file halaman) terlepas dari CPU yang mendukung PAE. Ini memastikan Anda dapat memulai banyak proses yang menggunakan lebih dari 4Gb digabungkan. Satu-satunya dampak yang dimiliki PAE adalah apakah Anda dapat menyimpan 4Gb proses B dalam memori fisik saat menjalankan proses A.

Dave Webb
sumber
apakah itu berarti jika tidak mendukung, lalu apa yang saya katakan di atas benar?
10
Windows XP memang mendukung PAE (dimulai dengan SP2, saya pikir), tetapi mengabaikan RAM melebihi 4GB bahkan ketika mesin mendukung PAE; lihat di sini . Ini digunakan untuk Pencegahan Eksekusi Data berbasis perangkat keras - bit NX / XD hanya tersedia dalam entri tabel halaman PAE, bukan entri tabel halaman "biasa".
Wyzard
Chipset juga dapat menjadi faktor pembatas berapa banyak memori yang dapat didukung / digunakan terlepas dari OS atau peretasan yang Anda pilih.
Moab
5
Saya akan menambahkan bahwa alasan mengapa versi konsumen dari windows 32bit tidak mendukung> 4GB ram adalah bahwa sejumlah besar perangkat keras drive ditemukan tidak berfungsi dengan benar dengan banyak memori; dan karena pada saat itu> 4GB ram sangat jarang di luar server / workstation ultra high end bahwa sebagian besar perusahaan yang mempertahankan driver tidak tertarik mengeluarkan uang untuk memperbarui driver yang hanya akan digunakan oleh 0,1% dari basis pelanggan mereka.
Dan Neely
6
@ DanNeely OS memang memiliki dukungan untuk memori, itu terbatas karena masalah perizinan . Meskipun saya setuju bahwa ini adalah peretasan pihak ketiga, ini hanya untuk varian konsumen Windows. Distribusi Windows berbasis server, mulai dari Windows 2000 , telah memiliki dukungan memori lebih dari 4GB (lihat tautan pertama).
Terobosan
15

Berbicara secara spesifik tentang varian Windows 32-bit, mereka telah mendukung lebih dari 4GB RAM sejak varian Windows 2003 (dan Anda juga bisa mendapatkan peretasan kernel untuk Windows 7 untuk memungkinkan Anda menggunakan semua RAM Anda dalam 32-bit). Namun, ini harus dibayar, seperti yang Anda jelaskan di bagian pertama dari pertanyaan Anda.

Dalam sistem operasi 32-bit, ukuran penunjuk (alamat memori) sama dengan panjang kata CPU, 32-bit, yang memungkinkan (seperti yang Anda sebutkan) 2 ^ 32 = ruang memori 4GB. Windows juga mengambil pendekatan "memori virtual" untuk aplikasi, sehingga setiap aplikasi memiliki ruang memori sendiri.

Karena setiap pointer hanya memiliki lebar 32-bit, masing-masing pointer aplikasi hanya dapat mengatasi memori hingga 4GB, meskipun sistem dapat mendukung lebih dari 4GB RAM. Sejauh yang saya tahu, ini adalah satu-satunya peringatan untuk menggunakan lebih dari 4GB RAM dalam sistem operasi 32-bit. Secara total, Anda dapat memiliki banyak aplikasi menggunakan lebih dari 4GB RAM, tetapi setiap proses tertentu hanya dapat mengalokasikan / mengakses hingga 4GB.


Kembali ke pertanyaan Anda, katakanlah Anda memiliki program yang menggunakan 2GB RAM. Jika Anda memiliki 10 instance dari program ini, itu adalah 20GB. Semua 8GB RAM Anda akan habis, serta 12GB pagefile lainnya. Jadi ya, di bawah sistem operasi 32-bit, lebih dari mungkin untuk menggunakan memori ini.

jika mesin OS 32-bit ini memiliki 2GB RAM dan 2GB halaman file, meningkatkan ukuran file halaman tidak akan membantu kinerja. Apakah ini benar?

Menambah ukuran pagefile biasanya tidak akan meningkatkan kinerja (kecuali RAM dan pagefile Anda diatur ke minimum absolut, atau diset sedemikian rendahnya sehingga komputer Anda terus menerus meronta-ronta). Namun, itu akan mencegah komputer Anda kehabisan memori (virtual). Setiap kali ada yang perlu dibersihkan ke pagefile, Anda sudah mendapatkan performa yang luar biasa (karena hard drive adalah perintah yang besarnya lebih lambat dari RAM Anda).

Penerobosan
sumber
Dari ruang alamat 4GB yang didapat setiap proses, hanya 2GB yang benar-benar tersedia untuk digunakan oleh program; 2GB lainnya dicadangkan untuk digunakan oleh kernel. The / 3GB opsi boot dapat memungkinkan beberapa program untuk menggunakan lebih banyak RAM.
Wyzard
1
@Breakthrough: "Meningkatkan ukuran pagefile tidak akan pernah meningkatkan kinerja" Saya tidak berpikir ini benar. Sebagai contoh, jika ada lebih banyak swap, OS dapat lebih agresif menukar data program yang tidak digunakan, dan menggunakan RAM gratis untuk misal caching disk. Dalam beberapa konfigurasi, ini dapat menghasilkan kinerja yang lebih baik. Ada jawaban yang bagus pada ServerFault tentang mengapa pagefile penting, yang menyentuh masalah ini: serverfault.com/questions/23621/…
sleske
2
Hati-hati dengan pernyataan selimut seperti "Meningkatkan ukuran pagefile tidak akan pernah meningkatkan kinerja" , sangat mungkin untuk file halaman yang terlalu kecil untuk menghasilkan lebih banyak meronta-ronta disk daripada memiliki file halaman yang lebih besar! Lihat jawaban dan komentar dalam pertanyaan ini .
Mark Booth
1
@sleske Poin bagus, saya memperbaruinya menjadi lebih dari jenis "biasanya tidak". Sementara saya setuju itu mungkin membuat perbedaan besar dalam server, bagi kebanyakan orang, poin yang saya coba sampaikan adalah bahwa mereka akan lebih baik hanya mendapatkan lebih banyak RAM (karena ketika Anda melakukan paging, kinerjanya cukup lambat. karena bisa).
Terobosan
-1

Ketika sebuah prosesor dikatakan 32-bit, itu berarti dapat beroperasi dengan angka 32-bit menggunakan instruksi tunggal. Ini tidak ada hubungannya dengan lebar bus alamatnya, yang pada arsitektur Intel adalah 36-bit sejak Pentium Pro dirilis pada tahun 1995.

Keterbatasan 4GB yang terkenal berasal dari kenyataan bahwa sebagian besar perangkat lunak PC menggunakan model memori Flat di mana setiap byte memori dapat ditangani oleh sebuah pointer. Karena sebuah pointer harus sesuai dengan register yang akan digunakan, dan register berukuran 32-bit, Anda dibatasi hingga 4GB.

Dmitry Grigoryev
sumber
Ini tidak benar, seperti yang ditunjukkan dalam jawaban sebelumnya di atas.
ChrisInEdmonton
Bisakah Anda menunjukkan satu fakta tertentu bahwa saya salah?
Dmitry Grigoryev
1
Satu proses dapat menggunakan lebih dari 4 GB. Secara khusus, jawaban sebelumnya menunjukkan "Sebuah proses dapat memiliki lebih banyak memori daripada ruang alamat".
ChrisInEdmonton
2
Lihat misalnya, blog.superuser.com/2011/04/23/... Sekarang, tentu saja, Anda tidak dapat menggunakan lebih dari 4 GB secara bersamaan, tetapi satu proses tunggal dapat memetakan dan memetakan kembali memori, sehingga dapat menggunakan lebih dari 4 GB dalam satu proses, hanya ada sedikit pembukuan. Posting blog itu agak khusus untuk Windows. Saya sudah menjalankan server basis data dengan alokasi memori> 4 GB, pada pemasangan Linux 32-bit. Hari-hari ini, tentu saja, Anda hanya menjalankan Linux 64-bit.
ChrisInEdmonton
1
Oke, permintaan maaf saya. Saya tidak memikirkan kemungkinan mmapmemori tambahan.
Dmitry Grigoryev