Berapa banyak alamat memori yang bisa kita dapatkan dengan prosesor 32-bit dan ram 1GB?

12

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.

johan smohan
sumber
Secara virtual, semua sistem modern ditujukan pada byte, artinya 32 bit dapat mengatasi sekitar 4 gigabytes (jika RAM yang terpasang banyak). Secara historis, ada skema alamat kata, dengan "kata" menjadi 12, 15, 16, 17, 24, 32, 36, atau 48 bit, dan kemungkinan beberapa yang lain, ditambah mesin desimal yang membahas 4 atau 6-bit satuan. Tetapi juga perlu diingat bahwa sebagian besar sistem modern menggunakan memori virtual, yang berarti bahwa prosesor dapat mengatasi lebih banyak memori daripada apa yang diinstal.
Daniel R Hicks
@DanielRHicks Memori virtual tidak memengaruhi seberapa banyak RAM yang dapat ditangani.
Jamie Hanrahan
@JamieHanrahan - Agar memori virtual berfungsi, harus ada beberapa mekanisme pengalamatan yang menjangkau rentang alamat virtual (dari satu proses tunggal). Ini dapat dilakukan dengan simulasi perangkat lunak, tetapi itu cukup tidak efisien, sehingga di sebagian besar sistem rentang pengalamatan prosesor dibuat cukup besar untuk memasukkan ruang alamat maksimal suatu proses.
Daniel R Hicks
@DanielRHicks Tentu, tapi itu tidak mempengaruhi berapa banyak RAM yang bisa diatasi. RAM adalah memori fisik, bukan virtual. Alamat virtual bukan alamat RAM dan memori virtual bukan RAM.
Jamie Hanrahan
@JamieHanrahan - Anda tidak masuk akal. Jika Anda tidak dapat menangani halaman RAM di ruang alamat virtual maka RAM tidak berguna. (Saya tahu betul bagaimana memori virtual bekerja, setelah bekerja pada desain memori virtual sejak 1972.)
Daniel R Hicks

Jawaban:

38

Jawaban singkat: Jumlah alamat yang tersedia sama dengan yang lebih kecil dari itu:

  • Ukuran memori dalam byte
  • Integer unsigned terbaik yang dapat disimpan dalam kata mesin CPU

Jawaban panjang dan penjelasan di atas:

Memori terdiri dari byte (B). Setiap byte terdiri dari 8 bit (b).

1 B = 8 b

RAM 1 GB sebenarnya adalah 1 GiB (gibibyte, bukan gigabyte). Perbedaannya adalah:

1 GB  = 10^9 B = 1 000 000 000 B
1 GiB = 2^30 B = 1 073 741 824 B

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.

  • Untuk mengakses byte pertama, ia harus melewati 0 byte, jadi alamat byte pertama adalah 0.
  • Untuk mengakses byte kedua, ia harus melewati 1 byte, jadi alamatnya adalah 1.
  • (Dan seterusnya...)
  • Untuk mengakses byte terakhir, CPU melompati 1073741823 byte, jadi alamatnya adalah 1073741823.

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:

Decimal Binary
0       0000
1       0001
2       0010
3       0011
4       0100
5       0101
6       0110
7       0111
8       1000
9       1001
10      1010
11      1011
12      1100
13      1101
14      1110
15      1111

Ini berfungsi persis seperti penambahan biasa, tetapi digit maksimum adalah 1, bukan 9. Desimal 0 adalah 0000, lalu Anda tambahkan 1 dan dapatkan 0001, tambahkan satu lagi dan yang Anda miliki 0010. Seperti apa happend di sini dengan memiliki desimal 09dan 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.

   11111111    = 255
+         1
-----------
  100000000    = 0   (9 bits here, so 1 is trimmed)
  • Untuk 1 bit, nilai terbesar adalah 1,
  • 2 bit - 3,
  • 3 bit - 7,
  • 4 bit - 15

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:

  • Jumlah halaman tempat kata itu dicetak.
  • Kata mana pada halaman itu yang Anda cari.

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:

 _____
|  0  |
|  0  |
|  0  |
| 255 |
|  0  |
|  0  |
|  0  |
|  0  |
 -----

Ilustrasi untuk memori halaman dengan halaman 4-byte:

 PAGE0
 _____
|  0  |
|  0  |
|  0  |  PAGE1
| 255 |  _____
 -----  |  0  |
        |  0  |
        |  0  |
        |  0  |
         -----

Ilustrasi untuk memori tersegmentasi dengan segmen 4-byte digeser oleh 1:

 SEG 0
 _____   SEG 1
|  0  |  _____   SEG 2
|  0  | |  0  |  _____   SEG 3
|  0  | |  0  | |  0  |  _____   SEG 4
| 255 | | 255 | | 255 | | 255 |  _____   SEG 5
 -----  |  0  | |  0  | |  0  | |  0  |  _____   SEG 6
         -----  |  0  | |  0  | |  0  | |  0  |  _____   SEG 7
                 -----  |  0  | |  0  | |  0  | |  0  |  _____
                         -----  |  0  | |  0  | |  0  | |  0  |
                                 -----   -----   -----   -----

Seperti yang Anda lihat, byte ke-4 dapat diatasi dengan empat cara: (mengatasi dari 0)

  • Segmen 0, offset 3
  • Segmen 1, offset 2
  • Segmen 2, offset 1
  • Segmen 3, offset 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.

gronostaj
sumber
1
Sebuah OS dapat memberikan ruang alamat virtual 4GiB penuh (mungkin minus satu halaman - 4KiB untuk x86) untuk proses pengguna, tetapi itu membuat panggilan sistem lebih mahal karena ruang alamat harus diubah. Dengan PAE dan mekanisme serupa, jumlah memori fisik yang dapat ditangani oleh sistem dapat ditingkatkan meskipun alamat masih terbatas pada 32 bit.
Paul A. Clayton
Bukan itu yang saya cari, tapi ini informasi yang bagus! Terima kasih atas penjelasan yang baik tentang maks. digit hal (1 = maks. seperti dalam biner 9 adalah maks.) untuk perbandingan tabel biner dan desimal. Benar-benar cara berpikir yang baik tentang ini. Saya belajar sesuatu yang baru. :) terima kasih!
johan smohan
Gibi dan Giga ini sangat membingungkan ... Karena di beberapa situs saya membaca bahwa memori diukur dalam Gibi dan pada yang lain ada di Giga ... Apakah Anda memiliki sumber yang bagus / dapat diandalkan?
johan smohan
Wikipedia memiliki artikel tentang awalan biner, termasuk beberapa latar belakang historis. Sebagian besar nomor yang terkait dengan perangkat keras menggunakan awalan desimal, pengecualian yang paling terkenal mungkin RAM dan mungkin skala warna - misalnya. LCD dengan 16 juta warna memiliki tiga saluran warna 8-bit (2 ^ 24). Menjawab pertanyaan Anda secara langsung: Dalam hal ini jumlah alamat yang tersedia sama dengan jumlah byte memori, karena RAM ditangani berdasarkan per-byte. CPU 32-bit dapat menangani hingga 2 ^ 32 B, 64-bit satu - 2 ^ 64.
gronostaj
Terima kasih! Saya membutuhkan ini untuk ujian sekolah. :) Saya pikir saya mengerti banyak hal sekarang. Satu-satunya hal yang masih mengganggu saya adalah mengapa 2 ^ 32 B, apakah itu prosesor 32bit dan bukan 32byte?
johan smohan
3

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.

Daniel R Hicks
sumber
2

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.

LawrenceC
sumber
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. Anda benar tentang ruang alamat 4 * 1024 * 1024 * 1024 byte, tetapi saya sedang mencari ruang alamat memori, yang saya pikir 1GB / 32bits, tetapi saya masih tidak tahu apakah saya benar atau tidak. :) Terima kasih atas jawaban Anda!
johan smohan
Np. CPU Intel memiliki dua ruang alamat: "Memori" dan "I / O". Hal-hal selain RAM muncul di ruang "Memori". Hal-hal lain seperti perangkat I / O atau ROM mungkin ada di tempat-tempat yang tidak dihuni oleh RAM. Umumnya hanya perangkat I / O yang muncul di ruang alamat I / O.
LawrenceC
@ johansmohan Baik nomor Anda maupun jawaban Lawrence tidak benar. Tidak ada hubungan tetap antara "lebar bit" prosesor dan lebar alamat RAM yang dapat digunakan. Prosesor x86 32-bit-only dapat mengatasi RAM 64 GB. Prosesor x64 dimulai pada ruang alamat fisik 40-bit dan sekarang pada 52 bit. Adapun ruang alamat virtual, itu bisa berbeda juga. Pada x64, meskipun alamat virtual membutuhkan 64 bit untuk disimpan, hanya 48 bit yang diimplementasikan, untuk VAS 256 TiB, bukan 16 EiB yang Anda harapkan dari 64 bit.
Jamie Hanrahan
0

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.

Asam
sumber
Anda berarti 1024 * 1024 * 1024 dan bukan 1 * 1024 * 1024 bukan?
johan smohan
Prosesor 32bit dapat menangani paling banyak 2 ^ 32 oktet atau bit? Hanya mengecek, karena saya harus tahu pasti.
johan smohan
@ johan smohan Benar, seharusnya 1 * 1024 * 1024 * 1024
AcId
@johan smohan Prosesor 32bit dapat menangani paling banyak 2 ^ 32 byte, dengan satu byte menjadi 8 bit (satu oktet bit bit)
AcId
0

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".

Dmitriy Dokshin
sumber
Saya setuju. Perhatikan bahwa model PDP-11 16-bit yang lebih baru memiliki bus alamat 22-bit (dan demikian juga dapat mengatasi 4 MB RAM), HP 1000MX, juga "16-bit", akhirnya mencapai 16 MB RAM (24 alamat-bit); VAX adalah CPU 32-bit tetapi memiliki ruang alamat fisik 30-bit, tetapi setengahnya disediakan untuk ruang I / O, untuk batas RAM 512 MB; "16-bit" 8086, 1 MB; "16-bit" 80286, 16 MB; dll. Dan ketika PAE diperkenalkan dengan Pentium Pro, x86 32-bit dapat menangani hingga 64 GB RAM (ruang alamat fisik 24-bit, meskipun orde tiga bit yang rendah tidak pernah benar-benar keluar dari CPU).
Jamie Hanrahan
-2

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.

Tuncay Göncüoğlu
sumber
2
Perbedaan signifikan antara prosesor 32 dan 64 bit adalah rentang alamat (yang memengaruhi ruang alamat virtual lebih dari "nyata"). Prosesor menggunakan banyak trik sehingga sulit untuk mengatakan apa sebenarnya lebar jalur data, dalam banyak kasus. Dan panjang instruksi sebagian besar tidak terkait dengan "lebar" prosesor.
Daniel R Hicks
Penjelasannya benar sekali. Dengan asumsi Anda tidak bermaksud dimensi chip yang sebenarnya dalam sentimeter ketika mengatakan "lebar prosesor", dalam hal ini Anda akan benar dalam mengatakan tidak terkait, Anda salah mengartikan teknik pemetaan memori / ruang alamat virtual dengan pengalamatan memori fisik. Selain itu apa yang Anda katakan lebih terkait dengan implementasi kernel, Anda mungkin ingin memeriksa kernel Linux PAE.
Tuncay Göncüoğlu
2
Panjang instruksi tidak memiliki hubungan sama sekali dengan "lebar" prosesor dalam sistem modern. Nilai yang paling relevan adalah lebar register (meskipun itu bisa menipu), lebar dari jalur transfer antara prosesor dan memori, dan ukuran dalam bit alamat memori. Tetapi 3 nilai ini dapat dengan mudah berbeda satu sama lain.
Daniel R Hicks
1
@DanielRHicks Daniel Hicks benar. "Lebar bit" dari CPU tidak harus ada hubungannya dengan "ukuran instruksi, atau ukuran perintah". Ada CPU yang dibangun seperti itu tetapi prosesor komoditas saat ini (x86 / x64) tidak ada di antara mereka.
Jamie Hanrahan