Berapa banyak memori yang dapat diakses proses 32 bit pada sistem operasi 64 bit?

86

Pada Windows, dalam keadaan normal proses 32 bit hanya dapat mengakses RAM 2GB (atau 3GB dengan sakelar khusus di file boot.ini). Saat menjalankan proses 32 bit pada sistem operasi 64 bit, berapa banyak memori yang tersedia? Apakah ada sakelar atau pengaturan khusus yang dapat mengubah ini?

jjxtra.dll
sumber

Jawaban:

92

2 GB secara default. Jika aplikasinya memiliki ruang alamat yang besar (ditautkan dengan / LARGEADDRESSAWARE), ia mendapat 4 GB (bukan 3 GB, lihat http://msdn.microsoft.com/en-us/library/aa366778.aspx )

Mereka masih terbatas pada 2 GB karena banyak aplikasi bergantung pada bagian atas petunjuk menjadi nol.

Michael
sumber
5
Adakah yang bisa menjelaskan mengapa proses tidak dapat mengakses 4GB penuh?
BlueTrin
1
Maksud kamu apa? Jika Anda membuatnya sendiri, Anda dapat menggunakan bendera / LARGEADDRESSAWARE dan membuatnya bekerja dengan 4GB, jika tidak, Anda bergantung pada pengembang yang melakukannya.
SilverbackNet
Apakah karena penunjuk bisa berbahaya ditafsirkan dengan komplemen dua?
rosstex
1
Dengan ini - since many application depends on the top bit of pointers to be zeromaksud Anda bahwa bit 32 dari skema pengalamatan tidak dianggap atau digunakan saat melintasi ruang alamat dari proses tersebut.
NSP
21

4 GB dikurangi apa yang digunakan oleh sistem jika Anda menghubungkan dengan / LARGEADDRESSAWARE.

Tentu saja, Anda harus lebih berhati-hati dengan aritmatika penunjuk jika Anda menyetel bendera itu.

MSN
sumber
-1: Sistem akan menggunakan alamat 64 bit untuk dirinya sendiri, jadi tidak perlu mengurangi sesuatu
Thomas Weller
@ ThomasW., Itu tidak benar, setidaknya di Windows. WOW64 masih membutuhkan 32-bit thunks untuk panggilan sistem 64-bit. Lihat msdn.microsoft.com/en-us/library/windows/desktop/…
MSN
1
Maksud Anda 605 kB DLL itu? Maaf, saya tidak mengerti karena pertanyaannya lebih banyak tentang GB memori.
Thomas Weller
7
@ ThomasW., Itulah mengapa saya mengatakan "dikurangi apa yang digunakan oleh sistem."
MSN
FYI Link mati yang satu ini
jjxtra
14

Sepertinya tidak ada yang menyentuh fakta bahwa jika Anda memiliki banyak aplikasi 32-bit yang berbeda, subsistem wow64 dapat memetakannya di mana saja di memori di atas 4G, jadi pada jendela 64-bit dengan memori yang cukup, Anda dapat menjalankan lebih banyak aplikasi 32-bit daripada pada sistem 32-bit asli.

Bahaya sepuluh Napel
sumber
7
Anda sedang berbicara tentang RAM fisik, sedangkan OP berbicara tentang memori virtual. Bahkan pada sistem 32 bit Anda dapat menjalankan banyak aplikasi, selama file halaman Anda cukup besar.
Thomas Weller
8

Proses 32-bit masih terbatas pada batasan yang sama di OS 64-bit. Masalahnya adalah bahwa penunjuk memori hanya selebar 32-bit, sehingga program tidak dapat menetapkan / menyelesaikan alamat memori apa pun yang lebih besar dari 32 bit.

Ben S
sumber
4
Ini akan berguna jika Anda menjelaskan bahwa 32 bit membahas ruang 4GB.
Insinyur
4

Proses tunggal 32-bit di bawah OS 64-bit dibatasi hingga 2 Gb. Tetapi jika dikompilasi ke file EXE dengan IMAGE_FILE_LARGE_ADDRESS_AWAREbit set, maka batasnya adalah 4 GB, bukan 2 Gb - lihat https://msdn.microsoft.com/en-us/library/aa366778(VS.85).aspx

Hal-hal yang Anda dengar tentang bendera boot khusus, 3 GB, /3GBsakelar, atau/userva semuanya tentang sistem operasi 32-bit dan tidak berlaku pada Windows 64-bit.

Lihat https://msdn.microsoft.com/en-us/library/aa366778(v=vs.85).aspx untuk lebih jelasnya.

Mengenai sistem operasi 32-bit, bertentangan dengan kepercayaan, tidak ada batasan fisik sebesar 4GB untuk sistem operasi 32-bit. Misalnya, Sistem Operasi Server 32-bit seperti Microsoft Windows Server 2008 32-bit dapat mengakses hingga 64 GB(Edisi Windows Server 2008 Enterprise dan Datacenter) - melalui Ekstensi Alamat Fisik (PAE), yang pertama kali diperkenalkan oleh Intel di Pentium Pro, dan kemudian oleh AMD dalam prosesor Athlon - ini mendefinisikan hierarki tabel halaman dari tiga tingkat, dengan entri tabel masing-masing 64 bit, bukan 32, memungkinkan CPU ini untuk langsung mengakses ruang alamat fisik yang lebih besar dari 4 gigabyte - jadi secara teoritis, OS 32-bit dapat mengakses 2 ^ 64 byte secara teoritis, atau 17.179.869.184 gigabyte, tetapi segmennya adalah dibatasi oleh 4GB. Namun, karena alasan pemasaran, Microsoft telah membatasi memori maksimum yang dapat diakses pada sistem operasi non-server menjadi hanya 4GB, atau, bahkan, 3GB secara efektif. Jadi, satu proses dapat mengakses lebih dari 4GB pada OS 32-bit - dan server Microsoft SQL adalah contohnya.

Proses 32-bit di bawah 64-bit Windows tidak memiliki kerugian dibandingkan dengan proses 64-bit dalam menggunakan ruang alamat virtual kernel bersama (juga disebut ruang sistem ). Semua proses, baik itu 64-bit atau 32-bit, di bawah 64-bit Windows berbagi ruang sistem 64-bit yang sama.

Mengingat fakta bahwa ruang sistem dibagi di semua proses , pada Windows 32-bit , proses yang membuat sejumlah besar pegangan (seperti utas, semaphore, file, dll.) Mengkonsumsi ruang sistem oleh objek kernel dan dapat kehabisan memori bahkan jika Anda memiliki banyak memori yang tersedia secara total. Sebaliknya, pada Windows 64-bit , ruang kernel 64-bit dan tidak dibatasi oleh 4 GB. Semua panggilan sistem yang dibuat oleh aplikasi 32-bit dikonversi ke panggilan 64-bit asli dalam mode pengguna .

Maxim Masiutin
sumber
1
Pertanyaan ini menanyakan tentang berapa banyak memori yang dapat diakses oleh satu proses . Itu dibatasi oleh ruang alamat memori virtual 32-bit. Tentu Anda dapat memiliki beberapa proses 32-bit masing - masing menggunakan 4GB di komputer yang sama, bahkan dengan OS 32-bit menggunakan PAE. Tapi bukan itu yang ini pertanyaan yang meminta.
Peter Cordes
@PeterCordes - maaf, dan terima kasih - saya telah memperbarui jawaban tentang batas 2GB / 4GB.
Maxim Masiutin
@PeterCordes, terima kasih atas komentar Anda, saya telah memperbarui balasan untuk menekankan bahwa beberapa proses 32-bit masing-masing dapat menggunakan 4GB pada komputer yang sama, bahkan dengan OS 32-bit menggunakan PAE, dan proses 32-bit di bawah 64- bit OS tidak mengalami batasan ruang sistem 2GB yang merupakan masalah di bawah OS 32-bit.
Maxim Masiutin
-1

Anda memiliki batasan dasar yang sama saat menjalankan proses 32bit di bawah Win64. Aplikasi Anda berjalan di 32 tetapi subsistem yang paling baik terlihat seperti Win32, dan ini akan termasuk pembatasan memori untuk proses Anda (lebih rendah 2GB untuk Anda, atas 2GB untuk OS)

Sean
sumber
-11

Batasnya bukan 2g atau 3gb, 4gb untuk 32bit.

Alasan orang berpikir 3gb-nya adalah karena OS menunjukkan 3gb gratis ketika mereka benar-benar memiliki ram sistem 4gb.

Total RAM-nya 4gb. Jadi jika Anda memiliki kartu video 1 gb yang dihitung sebagai bagian dari ram total yang dilihat oleh OS 32bit.

4Gig not 3 not 2 got it?

BobJ
sumber
2
Itu tidak benar. Untuk sistem x86 standar (tidak ada ekstensi memori), kernel dapat mengakses ruang memori 4GiB penuh (meskipun komputer hanya memiliki 1GiB ram karena paging). Kernel menyimpan 2GiB atas (beberapa kernel memesan 1GiB atau 3GiB sebagai gantinya) untuk digunakan sendiri. Memori virtual setiap proses juga memiliki memori cadangan kernel yang dipetakan dan dengan demikian proses tidak dapat menggunakan memori 2GiB.
Alex Jorgenson
3
Selain itu, kartu video tidak ada hubungannya dengan jumlah memori yang dapat digunakan suatu proses. Tabel ACPI, IO yang dipetakan memori, dll. Menggunakan alamat memori fisik, tetapi hal itu dapat dihindari berkat memori virtual.
Alex Jorgenson
1
Ini salah Microsoft memilih (pilihan desain) untuk membagi ruang alamat Virtual 32-bit dengan Windows NT sehingga 2GB dicadangkan untuk pemetaan OS (panggilan driver / API / sistem dll) dan tersisa 2GB untuk penggunaan Aplikasi. / Sakelar boot 3GB mengubah perilaku ini (1GB untuk pemetaan OS, 3GB untuk kode aplikasi). Saya pergi mencari dokumen arsitektur memori virtual Windows NT 3.x yang lama sebagai latihan untuk pembaca :-)
ripvlan