Berapa banyak alamat memori yang bisa kita dapatkan dengan prosesor 32-bit dan ram 1GB dan berapa banyak dengan prosesor 64-bit?
Saya pikir ini kira-kira seperti ini:
1GB ram dibagi dengan 32 bit atau dibagi 4? untuk mendapatkan jumlah alamat memori?
Tapi saya tidak yakin. Itu sebabnya saya bertanya.
Saya merah di wikipedia bahwa 1 alamat memori memiliki lebar 32 bit atau 4 oktet (1 oktet = 8 bit), dibandingkan dengan prosesor 64bit, di mana 1 alamat memori atau 1 integer adalah lebar 64 bit atau 8 oktet. Tetapi tidak tahu apakah saya memahaminya dengan benar.
Jawaban:
Jawaban singkat: Jumlah alamat yang tersedia sama dengan yang lebih kecil dari itu:
Jawaban panjang dan penjelasan di atas:
Memori terdiri dari byte (B). Setiap byte terdiri dari 8 bit (b).
RAM 1 GB sebenarnya adalah 1 GiB (gibibyte, bukan gigabyte). Perbedaannya adalah:
Setiap byte memori memiliki alamatnya sendiri, tidak peduli seberapa besar kata mesin CPU. Misalnya. Intel 8086 CPU adalah 16-bit dan itu menangani memori dengan byte, begitu juga CPU 32-bit dan 64-bit modern. Itulah penyebab batas pertama - Anda tidak dapat memiliki lebih banyak alamat daripada memori byte.
Alamat memori hanya sejumlah byte yang harus dilewati CPU dari awal memori untuk sampai ke yang dicari.
Sekarang Anda harus tahu apa arti sebenarnya 32-bit. Seperti yang saya sebutkan sebelumnya, itu ukuran kata mesin.
Kata mesin adalah jumlah memori yang digunakan CPU untuk menyimpan angka (dalam RAM, cache, atau register internal). CPU 32-bit menggunakan 32 bit (4 byte) untuk menyimpan angka. Alamat memori juga angka, jadi pada CPU 32-bit alamat memori terdiri dari 32 bit.
Sekarang pikirkan tentang ini: jika Anda memiliki satu bit, Anda dapat menyimpan dua nilai di atasnya: 0 atau 1. Tambahkan satu bit lagi dan Anda memiliki empat nilai: 0, 1, 2, 3. Pada tiga bit, Anda dapat menyimpan delapan nilai : 0, 1, 2 ... 6, 7. Ini sebenarnya adalah sistem biner dan berfungsi seperti itu:
Ini berfungsi persis seperti penambahan biasa, tetapi digit maksimum adalah 1, bukan 9. Desimal 0 adalah
0000
, lalu Anda tambahkan 1 dan dapatkan0001
, tambahkan satu lagi dan yang Anda miliki0010
. Seperti apa happend di sini dengan memiliki desimal09
dan menambahkan satu: Anda mengubah 9 menjadi 0 dan menambah digit berikutnya.Dari contoh di atas, Anda dapat melihat bahwa selalu ada nilai maksimum yang dapat disimpan dalam angka dengan jumlah bit konstan - karena ketika semua bit bernilai 1 dan Anda mencoba meningkatkan nilainya dengan 1, semua bit akan menjadi 0, sehingga memecahkan jumlah. Ini disebut integer overflow dan menyebabkan banyak masalah yang tidak menyenangkan, baik untuk pengguna maupun pengembang.
Angka terbesar yang mungkin adalah 2 ^ N-1, di mana N adalah jumlah bit. Seperti yang saya katakan sebelumnya, alamat memori adalah angka dan juga memiliki nilai maksimum. Itu sebabnya ukuran kata mesin juga merupakan batasan untuk jumlah alamat memori yang tersedia - terkadang CPU Anda tidak dapat memproses angka yang cukup besar untuk mengatasi lebih banyak memori.
Jadi pada 32 bit Anda dapat menyimpan angka dari 0 hingga 2 ^ 32-1, dan itu adalah 4 294 967 295. Ini lebih dari alamat terbesar dalam 1 GB RAM, jadi dalam kasus spesifik Anda jumlah RAM akan menjadi faktor pembatas.
Batas RAM untuk CPU 32-bit secara teoritis adalah 4 GB (2 ^ 32) dan untuk CPU 64-bit adalah 16 EB (exabytes, 1 EB = 2 ^ 30 GB). Dengan kata lain, CPU 64-bit dapat menangani seluruh Internet ... 200 kali;) (diperkirakan oleh WolframAlpha ).
Namun, dalam sistem operasi kehidupan nyata CPU 32-bit dapat mengatasi sekitar 3 GiB RAM. Itu karena arsitektur internal sistem operasi - beberapa alamat dicadangkan untuk keperluan lain. Anda dapat membaca lebih lanjut tentang penghalang 3 GB ini di Wikipedia . Anda dapat mengangkat batas ini dengan Ekstensi Alamat Fisik .
Berbicara tentang pengalamatan memori, ada beberapa hal yang harus saya sebutkan: memori virtual , segmentasi dan paging .
Memori virtual
Seperti @Daniel R Hicks tunjukkan dalam jawaban lain, OS menggunakan memori virtual. Maksudnya adalah bahwa aplikasi sebenarnya tidak beroperasi pada alamat memori nyata, tetapi yang disediakan oleh OS.
Teknik ini memungkinkan sistem operasi untuk memindahkan beberapa data dari RAM ke apa yang disebut Pagefile (Windows) atau Swap (* NIX). HDD beberapa magnitude lebih lambat dari RAM, tetapi itu bukan masalah serius untuk data yang jarang diakses dan memungkinkan OS untuk menyediakan aplikasi lebih banyak RAM daripada yang sebenarnya telah Anda instal.
Paging
Apa yang kami bicarakan sejauh ini disebut skema pengalamatan datar.
Paging adalah skema pengalamatan alternatif yang memungkinkan untuk mengatasi lebih banyak memori yang biasanya Anda dapat dengan satu kata mesin dalam model datar.
Bayangkan sebuah buku berisi kata-kata 4 huruf. Katakanlah ada 1024 angka di setiap halaman. Untuk mengatasi suatu nomor, Anda harus mengetahui dua hal:
Nah, itulah tepatnya bagaimana x86 CPU modern menangani memori. Ini dibagi menjadi 4 halaman KiB (masing-masing 1024 kata mesin) dan halaman-halaman itu memiliki angka. (sebenarnya halaman juga bisa berukuran 4 MiB besar atau 2 MiB dengan PAE ). Saat Anda ingin menangani sel memori, Anda memerlukan nomor halaman dan alamat di halaman itu. Perhatikan bahwa setiap sel memori direferensikan oleh tepat sepasang angka, itu tidak akan menjadi kasus untuk segmentasi.
Segmentasi
Nah, ini sangat mirip dengan paging. Itu digunakan di Intel 8086, hanya untuk menyebutkan satu contoh. Grup alamat sekarang disebut segmen memori, bukan halaman. Perbedaannya adalah segmen dapat tumpang tindih, dan mereka banyak tumpang tindih. Misalnya pada 8086 sebagian besar sel memori tersedia dari 4.096 segmen yang berbeda.
Sebuah contoh:
Katakanlah kita memiliki 8 byte memori, semua nol memegang kecuali 4 byte yang sama dengan 255.
Ilustrasi untuk model memori datar:
Ilustrasi untuk memori halaman dengan halaman 4-byte:
Ilustrasi untuk memori tersegmentasi dengan segmen 4-byte digeser oleh 1:
Seperti yang Anda lihat, byte ke-4 dapat diatasi dengan empat cara: (mengatasi dari 0)
Itu selalu sel memori yang sama.
Dalam implementasi kehidupan nyata, segmen digeser lebih dari 1 byte (untuk 8086 itu 16 byte).
Apa yang buruk tentang segmentasi adalah rumit (tapi saya pikir Anda sudah tahu itu;) Yang bagus, adalah Anda bisa menggunakan beberapa teknik pintar untuk membuat program modular.
Misalnya Anda dapat memuat beberapa modul ke dalam segmen, kemudian berpura-pura segmen lebih kecil dari yang sebenarnya (hanya cukup kecil untuk menampung modul), lalu pilih segmen pertama yang tidak tumpang tindih dengan modul semu yang lebih kecil dan muat modul berikutnya , dan seterusnya. Pada dasarnya yang Anda dapatkan dengan cara ini adalah halaman dengan ukuran variabel.
sumber
Selain hal di atas, perhatikan bahwa pengalamatan virtual digunakan, bersama dengan beberapa ruang alamat . Jadi, meskipun Anda hanya memiliki 1GB RAM, sebuah program secara konseptual dapat menggunakan hingga 4GB memori virtual (meskipun sebagian besar sistem operasi akan membatasi hingga kurang dari ini). Dan Anda secara konseptual dapat memiliki (hampir) jumlah ruang alamat 4GB yang tak terbatas.
Ukuran RAM tidak membatasi (terlalu banyak) ukuran maksimum suatu program atau jumlah program yang dapat Anda jalankan, melainkan membatasi kinerja. Ketika memori nyata menjadi "terlalu berkomitmen" dan sistem mulai "meronta-ronta" saat "swap" "halaman" memori bolak-balik antara RAM dan disk, kinerja merosot.
sumber
RAM 1GByte akan menempati 1024 * 1024 * 1024 byte, atau 1.073.741.824 byte.
Prosesor 32-bit selalu memiliki 4 * 1024 * 1024 * 1024 byte, atau 4.294.967.296 byte ruang alamat 1Gbyte RAM muncul di dalam ruang ini. Pada prosesor Intel, beberapa RAM perlu muncul di alamat 0 untuk vektor interupsi, sehingga RAM fisik dimulai pada alamat 0 dan naik.
Hal-hal lain muncul di ruang alamat itu, seperti BIOS dan ROM opsi (di atas 384Kbytes dalam 1Mbyte pertama), perangkat I / O (seperti APIC), dan RAM video. Beberapa hal aneh juga berlangsung dengan mode manajemen sistem "SMRAM" yang belum saya mengerti sepenuhnya.
Perhatikan ini adalah ruang alamat fisik, dari sudut pandang kernel. MMU dapat mengatur ulang semua ini dengan cara apa pun ke proses userspace.
sumber
Prosesor 32bit dapat menangani paling banyak 2 ^ 32 byte memori (sekitar 4GB), tetapi memiliki 1GB memori akan membuat 1 * 1024 * 1024 * 1024 byte memori dialamatkan (walaupun Anda mungkin masih memiliki ruang alamat virtual 2 ^ 32 ). CPU 64bit dapat menangani 2 ^ 64 byte individual, tetapi saya pikir sebagian besar sistem hanya menggunakan 48 bit untuk alamat memori yang membuat batas atas. byte dialamatkan 2 ^ 48.
sumber
Jawaban yang diterima memberikan penjelasan yang bagus. Tapi saya pikir itu bukan jawabannya. Itu tidak mengandung apa pun tentang bus alamat . Dan ukurannya sebenarnya adalah alasan utama kendala memori. Misalnya 8080 adalah prosesor 8-bit (ukuran bus datanya adalah 8 bit), tetapi ia memiliki bus alamat 16-bit. Ini dapat mengatasi 2 ^ 16 = (2 ^ 6) * (2 ^ 10) = 64 * 1024 byte = 64KB.
Anda dapat menemukan lebih banyak di sini (32-bit) di bagian "Riwayat teknis".
sumber
Saya yakin info paling dasar hilang dalam percakapan ini, jadi inilah jawaban saya:
Mengatakan "Ini adalah prosesor 32 bit" berarti bahwa ukuran instruksi, atau ukuran perintah, yang dapat dimengerti dan bekerja dengan CPU pada satu waktu adalah 32 bit. Demikian juga dengan prosesor 64 bit: mereka dapat menangani instruksi paling banyak 64 bit.
Pikirkan ini seperti kalkulator mekanis lama: Anda hanya memiliki begitu banyak digit, jadi tidak bisa memasukkan angka yang lebih panjang.
Sekarang, alamat yang dapat digunakan CPU juga harus masuk ke dalam ruang yang sama, jadi untuk prosesor 32 bit, alamat yang digunakannya juga bisa paling banyak hanya 32 bit. Jadi, dari sini kita cukup menghitung jumlah alamat maksimum (yaitu, jumlah maksimum RAM yang dapat digunakan oleh CPU):
2 ^ 32 = 4294967296 (= 4 GB)
atau
2 ^ 64 = 18446744073709551616 (= lebih banyak;)
Atau, sebagai contoh yang menyenangkan, Commodore 64 saya yang lama memiliki CPU 16 bit, sehingga mampu mengelola memori:
2 ^ 16 = 65536 byte (= 64 KB)
Ini adalah logika dasar, tetapi, seperti yang dinyatakan sebelumnya, ada cara mengatasi batasan ini, seperti ruang alamat virtual, pemetaan memori dll.
sumber