Dalam sebuah buku saya membaca yang berikut ini:
Prosesor 32-bit memiliki 2 ^ 32 kemungkinan alamat, sedangkan prosesor 64-bit saat ini memiliki ruang alamat 48-bit
Harapan saya adalah jika prosesor 64-bit, ruang alamat juga harus 2 ^ 64.
Jadi saya bertanya-tanya apa alasan pembatasan ini?
The 32-bit processors have 2^32 possible addresses
belum tentu benar, bisa ada cpu 32bit dengan hanya 24 "pin" untuk menangani memori. Misalnya 68EC020 (versi 68020 lebih murah) adalah cpu 32bit tetapi dengan 24 bit untuk menangani memori.Jawaban:
Karena hanya itu yang dibutuhkan. 48 bit memberi Anda ruang alamat 256 terabyte. Itu banyak. Anda tidak akan melihat sistem yang membutuhkan lebih dari itu dalam waktu dekat.
Jadi produsen CPU mengambil jalan pintas. Mereka menggunakan set instruksi yang memungkinkan ruang alamat 64-bit penuh, tetapi CPU saat ini hanya menggunakan 48 bit yang lebih rendah. Alternatifnya adalah membuang-buang transistor untuk menangani ruang alamat yang lebih besar yang tidak akan dibutuhkan selama bertahun-tahun.
Jadi, begitu kita mendekati batas 48-bit, itu hanya masalah melepaskan CPU yang menangani ruang alamat penuh, tetapi tidak memerlukan perubahan apa pun pada set instruksi, dan itu tidak akan merusak kompatibilitas.
sumber
Setiap jawaban yang mengacu pada ukuran bus dan memori fisik sedikit keliru, karena pertanyaan OP adalah tentang ruang alamat virtual bukan ruang alamat fisik . Misalnya batas yang seharusnya analog pada beberapa 386 adalah batas pada memori fisik yang dapat mereka gunakan, bukan ruang alamat virtual, yang selalu 32 bit penuh. Pada prinsipnya Anda dapat menggunakan 64 bit penuh ruang alamat virtual bahkan dengan hanya beberapa MB memori fisik; tentu saja Anda dapat melakukannya dengan menukar, atau untuk tugas khusus di mana Anda ingin memetakan halaman yang sama di sebagian besar alamat (mis. operasi data jarang tertentu).
Saya pikir jawaban sebenarnya adalah bahwa AMD hanya menjadi murah dan berharap tidak ada yang peduli untuk saat ini, tetapi saya tidak memiliki referensi untuk dikutip.
sumber
__far
(atau lebih buruk lagi,FAR
/far
!) Petunjuk ...Baca bagian batasan dari artikel wikipedia :
Artinya, tidak ada gunanya menerapkan pengalamatan 64 bit penuh pada saat ini, karena kami tidak dapat membangun sistem yang dapat memanfaatkan ruang alamat seperti itu secara penuh - jadi kami memilih sesuatu yang praktis untuk sistem hari ini (dan masa depan).
sumber
Lebar registrasi / operasi asli internal tidak perlu dicerminkan dalam lebar bus alamat eksternal.
Katakanlah Anda memiliki prosesor 64 bit yang hanya perlu mengakses RAM 1 megabyte. Bus alamat 20 bit adalah semua yang diperlukan. Mengapa repot-repot dengan biaya dan kerumitan perangkat keras dari semua pin tambahan yang tidak akan Anda gunakan?
Motorola 68000 seperti ini; 32 bit secara internal, tetapi dengan bus alamat 23 bit (dan bus data 16 bit). CPU dapat mengakses 16 megabyte RAM, dan untuk memuat tipe data asli (32 bit) membutuhkan dua akses memori (masing-masing memuat 16 bit data).
sumber
Ada alasan yang lebih parah daripada hanya menyimpan transistor di jalur alamat CPU: jika Anda meningkatkan ukuran ruang alamat, Anda perlu menambah ukuran halaman, memperbesar ukuran tabel halaman, atau memiliki struktur tabel halaman yang lebih dalam (itu adalah lebih banyak tingkat tabel terjemahan). Semua hal ini meningkatkan biaya kehilangan TLB, yang mengganggu kinerja.
sumber
Dari sudut pandang saya, ini adalah hasil dari ukuran halaman, paling banyak setiap halaman berisi 4096/8 = 512 entri tabel halaman. Dan 2 ^ 9 = 512. Jadi 9 * 4 + 12 = 48.
sumber
Untuk menjawab pertanyaan awal: Tidak perlu menambahkan lebih dari 48 Bit PA.
Server membutuhkan jumlah memori maksimum, jadi mari kita coba menggali lebih dalam.
1) Konfigurasi server terbesar (umum digunakan) adalah sistem 8 Socket. Sebuah sistem 8S tidak lain adalah CPU 8 Server yang dihubungkan oleh interkoneksi koheren berkecepatan tinggi (atau sederhananya, "bus" berkecepatan tinggi) untuk membentuk satu node. Ada cluster yang lebih besar di luar sana tetapi jumlahnya sedikit dan jarang, kita berbicara tentang konfigurasi yang umum digunakan di sini. Perhatikan bahwa dalam penggunaan dunia nyata, sistem 2 Socket adalah salah satu server yang paling umum digunakan, dan 8S biasanya dianggap sangat canggih.
2) Jenis utama memori yang digunakan oleh server adalah memori DRAM biasa yang dapat dialamatkan byte (misalnya memori DDR3 / DDR4), Memory Mapped IO - MMIO (seperti memori yang digunakan oleh kartu tambahan), serta Ruang Konfigurasi yang digunakan untuk mengonfigurasi perangkat yang ada di sistem. Jenis memori pertama adalah yang biasanya terbesar (dan karenanya membutuhkan jumlah bit alamat terbesar). Beberapa server kelas atas menggunakan MMIO dalam jumlah besar juga tergantung pada konfigurasi sistem yang sebenarnya.
3) Asumsikan setiap CPU server dapat menampung 16 DIMM DDR4 di setiap slot. Dengan ukuran maksimum DIMM DDR4 256GB. (Bergantung pada versi server, jumlah kemungkinan DIMM per soket ini sebenarnya kurang dari 16 DIMM, tetapi lanjutkan membaca demi contoh).
Jadi setiap soket secara teoritis dapat memiliki 16 * 256GB = 4096GB = 4 TB. Untuk contoh sistem 8S kami, ukuran DRAM maksimal 4 * 8 = 32 TB. Ini berarti jumlah bit maksimal yang diperlukan untuk mengatasi ruang DRAM ini adalah 45 (= log2 32TB / log2 2).
Kami tidak akan membahas detail jenis memori lain (MMIO, MMCFG, dll.), Tetapi poinnya di sini adalah jenis memori yang paling "menuntut" untuk sistem 8 Socket dengan jenis DIMM DDR4 terbesar yang tersedia saat ini (256 GB DIMM) hanya menggunakan 45 bit.
Untuk OS yang mendukung 48 bit (WS16 misalnya), ada (48-45 =) 3 bit tersisa. Artinya, jika kita menggunakan 45 bit yang lebih rendah hanya untuk DRAM 32TB, kita masih memiliki 2 ^ 3 kali memori beralamat yang dapat digunakan untuk MMIO / MMCFG dengan total 256 TB ruang yang dapat dialamatkan.
Jadi, untuk meringkas: 1) 48 bit alamat Fisik adalah banyak bit untuk mendukung sistem terbesar saat ini yang "terisi penuh" dengan jumlah DDR4 yang berlebihan dan juga banyak perangkat IO lain yang membutuhkan ruang MMIO. 256TB tepatnya.
Perhatikan bahwa ruang alamat 256TB ini (= 48bits dari alamat fisik) TIDAK termasuk drive disk seperti drive SATA karena mereka BUKAN bagian dari peta alamat, mereka hanya menyertakan memori yang dapat dialamatkan byte, dan diekspos ke OS.
2) Perangkat keras CPU dapat memilih untuk mengimplementasikan 46, 48 atau> 48 bit tergantung pada generasi server. Tetapi faktor penting lainnya adalah berapa banyak bit yang dikenali OS. Saat ini, WS16 mendukung alamat fisik 48 bit (= 256 TB).
Artinya bagi pengguna adalah, meskipun server memiliki CPU server yang besar dan sangat modern yang dapat mendukung pengalamatan> 48 bit, jika Anda menjalankan OS yang hanya mendukung 48 bit PA, maka Anda hanya dapat memanfaatkan 256 TB .
3) Secara keseluruhan, ada dua faktor utama untuk memanfaatkan jumlah bit alamat yang lebih tinggi (= kapasitas memori lebih banyak).
a) Berapa banyak bit yang didukung oleh HW CPU Anda? (Ini dapat ditentukan dengan instruksi CPUID di CPU Intel).
b) Versi OS apa yang Anda jalankan dan berapa banyak bit PA yang dikenali / didukungnya.
Min dari (a, b) pada akhirnya akan menentukan jumlah ruang beralamat yang dapat dimanfaatkan oleh sistem Anda.
Saya telah menulis tanggapan ini tanpa melihat tanggapan lain secara detail. Juga, saya belum mempelajari secara detail nuansa MMIO, MMCFG dan keseluruhan konstruksi peta alamat. Tapi saya harap ini membantu.
Terima kasih, Anand K Enamandram, Arsitek Platform Server Intel Corporation
sumber
Banyak orang salah paham seperti ini. Tetapi saya berjanji kepada Anda jika Anda membaca ini dengan cermat, setelah membaca ini semua kesalahpahaman Anda akan hilang.
Untuk mengatakan prosesor 32 bit atau 64 bit tidak menandakan itu harus memiliki bus alamat 32 bit atau bus alamat 64 bit masing-masing! ... Saya ulangi TIDAK !!
Prosesor 32 bit berarti memiliki ALU 32 bit (Unit Aritmatika dan Logika) ... itu berarti dapat beroperasi pada operan biner 32 bit (atau hanya mengatakan bilangan biner memiliki 32 digit) dan demikian pula prosesor 64 bit dapat beroperasi pada 64 bit biner operan. Jadi apakah prosesor 32 bit atau 64 bit TIDAK menandakan jumlah maksimum memori yang dapat dipasang. Mereka hanya menunjukkan seberapa besar operannya ... (untuk analogi Anda dapat menganggap kalkulator 10 digit dapat menghitung hasil hingga 10 digit ... tidak dapat memberi kami 11 digit atau hasil lain yang lebih besar ... meskipun demikian dalam desimal tetapi saya mengatakan analogi ini untuk kesederhanaan) ... tetapi apa yang Anda katakan adalah ruang alamat yang merupakan ukuran memori (RAM) yang dapat langsung di-interface secara langsung. RAM ' Ukuran maksimum yang mungkin ditentukan oleh ukuran bus alamat dan itu bukan ukuran bus data atau bahkan ALU di mana ukuran prosesor ditentukan (32/64 bit). Ya, jika prosesor memiliki 32 bit "Bus alamat" maka ia dapat menangani 2 ^ 32 byte = 4GB RAM (atau untuk 64 bit itu akan menjadi 2 ^ 64) ... tetapi mengatakan prosesor 32 bit atau 64 bit memiliki tidak ada relevansinya dengan ruang alamat ini (ruang alamat = seberapa jauh ia dapat mengakses ke memori atau ukuran maksimum RAM) dan itu hanya tergantung pada ukuran ALU-nya. Tentu saja bus data dan bus alamat mungkin berukuran sama dan kemudian tampaknya prosesor 32 bit berarti akan mengakses memori 2 ^ 32 byte atau 4 GB ... tetapi ini hanya kebetulan dan tidak akan sama untuk semua.... misalnya intel 8086 adalah prosesor 16 bit (karena memiliki 16 bit ALU) jadi seperti yang Anda katakan seharusnya mengakses ke 2 ^ 16 byte = 64 KB memori tetapi itu tidak benar. Itu dapat mengakses hingga 1 MB memori untuk memiliki bus alamat 20 bit .... Anda dapat google jika Anda ragu :)
Saya pikir saya telah menjelaskan maksud saya Sekarang datang ke pertanyaan Anda ... karena prosesor 64 bit tidak berarti harus memiliki bus alamat 64 bit sehingga tidak ada salahnya memiliki bus alamat 48 bit dalam prosesor 64 bit ... mereka membuat ruang alamat lebih kecil untuk membuat desain dan fabrikasi murah .... karena tidak ada yang akan menggunakan memori sebesar itu (2 ^ 64 byte) ... di mana 2 ^ 48 byte lebih dari cukup saat ini.
sumber
Tidak benar bahwa hanya 48 bit orde rendah dari 64 bit VA yang digunakan, setidaknya dengan Intel 64. 16 bit teratas digunakan, semacam, jenis.
Bagian 3.3.7.1 Pengalamatan Kanonis dalam Panduan Pengembang Perangkat Lunak Arsitektur Intel® 64 dan IA-32 mengatakan:
Jadi bit 47 hingga 63 membentuk super-bit, baik semua 1 atau semua 0. Jika sebuah alamat tidak dalam bentuk kanonik, implementasi harus gagal.
Di AArch64, ini berbeda. Menurut Ikhtisar Set Instruksi ARMv8 , ini adalah VA 49-bit.
sumber
[vsyscall]
halaman. (Itu mungkin mengekspor barang-barang seperti PID saat ini sehingga itugetpid()
murni ruang pengguna. Jugagettimeofday()
dapat menggunakan rdtsc di ruang-pengguna + faktor skala yang diekspor oleh kernel. Meskipun beberapa di[vdso]
antaranya menurut saya , yang berada di dekat bagian atas bagian bawah.)__VMALLOC_BASE
. Agaknya itu tidak digunakan secara langsung.CPU dianggap "N-bits" terutama berdasarkan ukuran bus datanya, dan pada sebagian besar entitasnya (arsitektur internal) : Register, Accumulators, Arithmetic-Logic-Unit (ALU), Instruction Set, dll. Misalnya: CPU Motorola 6800 (atau Intel 8050) lama yang bagus adalah CPU 8-bit. Ini memiliki bus data 8-bit, arsitektur internal 8-bit, & bus alamat 16-bit.
sumber