Mengapa sistem x86-64 hanya memiliki ruang alamat virtual 48 bit?

97

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?

er4z0r
sumber
11
Buku tersebut pasti berbicara secara khusus tentang implementasi arsitektur AMD64 saat ini (x86-64). Hanya 48 bit orde rendah yang digunakan. Ini bukan batasan perangkat keras - semua 64 bit tersedia.
Cody Gray
7
Selalu merupakan ide yang bagus untuk mengidentifikasi buku tersebut.
Henk Holterman
1
Saya menduga bahwa baris alamat fisik tidak gratis (Anda memerlukan setidaknya 16 pin cpu tambahan). Dan saya tidak mengetahui perangkat keras apa pun yang dapat mengisi ruang 48 bit dengan chip RAM fisik pada prosesor yang sama. Ketika ini menjadi layak, saya yakin AMD akan menambahkan 16 pin yang hilang :)
Torp
7
Bahkan, The 32-bit processors have 2^32 possible addressesbelum 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.
ShinTakezou
21
Ada masalah yang sangat nyata dengan pengalamatan fisik 64-bit, ukuran halaman memori virtual terlalu kecil. Yang menghasilkan direktori halaman yang sangat besar dan cache TLB yang sangat mahal mengalir di setiap sakelar konteks. Pindah dari halaman 4KB ke 4MB adalah opsi tetapi sangat tidak kompatibel dengan sistem operasi saat ini.
Hans Passant

Jawaban:

134

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.

jalf
sumber
118
640kb sudah cukup untuk siapa saja.
7
Apakah Anda masih menjalankan sistem 8088, bdares?
Joe
23
@bdares: Analogi buruk. Set instruksi 8088/8086 arch memiliki batas 640k yang terpasang di dalamnya. Hanya membuat ISA (386) baru yang memungkinkan untuk menembus penghalang. x86_64 di sisi lain mendukung semua 64 bit di ISA. Hanya perangkat keras generasi saat ini yang tidak dapat menggunakan semuanya ...
R .. GitHub STOP HELPING ICE
16
@R. Sebenarnya, batasan pada CPU adalah satu megabyte. PC IBM menetapkan bagian itu untuk periferal yang dipetakan memori, BIOS, dll. Beberapa desain 8088/8086 lainnya (Zenith Z100, jika memori berfungsi) ditetapkan lebih sedikit untuk periferal dan semacamnya, dan lebih sesuai untuk program aplikasi.
Jerry Coffin
25
lwn.net/SubscriberLink/655437/9a48cd3e7a8cbe8a <- tiga tahun setelah balasan ini, kami sudah mencapai batas ini :) Mesin HP akan memiliki memori 320TB dan mereka tidak dapat menyediakannya sebagai ruang alamat datar karena 48 Batasan pengalamatan bit.
agam
18

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.

R .. GitHub BERHENTI ICE BANTUAN
sumber
14
"Menjadi murah" Saya rasa maksud Anda tidak menambahkan pin yang tidak akan pernah digunakan, tidak menggunakan ruang chip untuk transistor yang tidak akan digunakan dan menggunakan ruang kosong untuk mempercepat instruksi yang ada? Jika itu murah, saya ikut!
Olof Forshell
80386 memungkinkan 2 * 4096 penyeleksi masing-masing berisi hingga 4GB memori (total 32TB). 80286 mengizinkan 2 * 4096 pemilih yang masing-masing berisi hingga 64 KB (1 GB).
Olof Forshell
Peretasan tersegmentasi non-linier tidak dihitung sebagai ruang alamat di buku saya. Tidak ada cara bagi perangkat lunak portabel untuk memanfaatkannya.
R .. GitHub STOP HELPING ICE
@R .. - Saya pikir definisi perangkat lunak portabel adalah begitu bisa . :-) Misalnya, C ++ melarang membandingkan pointer ke dalam array yang berbeda sehingga bisa berada dalam segmen 4GB yang terpisah.
Bo Persson
Jika kompilasi Anda benar-benar menghasilkan pointer besar dan memuat register segmen untuk setiap dereferensi memori, ya. Namun pada kenyataannya itu sangat lambat, dan sebaliknya semua orang menggunakan model memori kecil dan__far (atau lebih buruk lagi, FAR/ far!) Petunjuk ...
R .. GitHub STOP HELPING ICE
10

Baca bagian batasan dari artikel wikipedia :

Sebuah PC tidak dapat berisi 4 petabyte memori (karena ukuran chip memori saat ini jika tidak ada yang lain) tetapi AMD membayangkan server besar, cluster memori bersama, dan penggunaan lain dari ruang alamat fisik yang mungkin mendekati ini di masa mendatang, dan 52 alamat fisik bit menyediakan ruang yang cukup untuk ekspansi tanpa menimbulkan biaya penerapan alamat fisik 64-bit

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

Damien_The_Tidak percaya
sumber
Dari mana 4 berasal dari 4 petabyte? Jika kita berbicara 64 baris alamat, kita harus berakhir dengan kuadrat dari ruang alamat yang dimungkinkan oleh 32 baris alamat yaitu 4 gigabyte. Kuadratkan itu dan kita harus memiliki 16, bukan 4 petabyte. Apakah saya melewatkan sesuatu?
Olof Forshell
1
Itu berasal dari batas fisik saat ini (52 bit) - intinya adalah kami tidak dapat menempatkan cukup RAM di PC untuk mendukung rentang terbatas ini, apalagi yang akan diperlukan untuk ruang alamat 64-bit penuh.
Damien_The_Unbeliever
9

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
1
tetapi 68000 dianggap sebagai cpu "16/32 bit", bukan "penuh" 32 bit cpu sehingga bisa dikatakan masih memiliki kaki di masa lalu 16bit; Saya telah memilih 68020 sebagai contoh, karena versi murahnya 68EC020 hanya memiliki 24 bit untuk alamat, meskipun 68020 adalah cpu 32 bit "penuh" ... +1 telah mempertimbangkan keluarga prosesor yang luar biasa ini!
ShinTakezou
@ShinTakezou: sejujurnya, apakah 80386SX adalah CPU 16-bit (karena memiliki ruang alamat seperti 80286) atau 32-bit (karena memiliki arsitektur internal 80386DX)? Seseorang dapat mengatakan seperti yang Anda lakukan tetapi yang lain (yang ini) mengatakan "internal adalah yang terpenting" - dan Anda dapat mengutip saya tentang itu.
Olof Forshell
@Olof Saya pikir, dalam konteks "memori" (yang merupakan dunia eksternal), eksternal adalah yang terpenting, jadi 68000 adalah CPU 16bit (perlu 2 "langkah" untuk membaca data 32 bit): D
ShinTakezou
@ShinTakezou: konteks memori, bahkan cache, selalu berada di luar cpu itu sendiri meskipun sangat erat digabungkan dalam prosesor modern. 8088 secara internal sama dengan 8086 meskipun memiliki delapan jalur bus data ke enam belas 8086. Saya tidak melihat apa yang tampaknya terlihat jelas, bahwa 8088 harus diklasifikasikan dalam grup yang sama dengan Z80, 8080, 8085 dll. Pertanyaan tentang lebar bus data tampaknya sepele dalam konteks itu
Olof Forshell
Saya sama sekali bukan ahli dalam masalah seperti itu, jadi saya tidak memiliki sesuatu yang jelas bagi saya. Saya hanya ingin memperhatikan perlunya pemotongan yang lebih tajam dengan masa lalu, di mana orang dapat berpikir 68000 masih merupakan prosesor "lama", jadi bahwa tampaknya "wajar" bahwa ruang alamatnya dibatasi kurang dari 32 bit; sedangkan 68020 dapat 32 bit, sehingga keberadaan 68EC020 dengan batasnya memperjelas bahwa itu adalah pilihan bukan karena "batas itu ( atau ini) waktu "tetapi untuk pertimbangan lain (seperti membuatnya lebih murah jika tidak ada keuntungan nyata memiliki 64 pin), yang kurang lebih merupakan argumen dari jawaban ini.
ShinTakezou
7

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.

Brendan
sumber
1
Intel mengusulkan skema halaman 5 tingkat untuk memperluas dari 48 bit saat ini menjadi 57 bit. (Sama 9 bit per halaman level / 4k seperti tabel halaman x86-64 saat ini). Menggunakan 10 atau 11 bit per level akan memerlukan perubahan perangkat keras berjalan halaman, jadi ini mungkin bukan desain yang optimal untuk memori besar, tetapi ini adalah ekstensi yang masuk akal untuk CPU mode ganda yang juga perlu mendukung kinerja maksimum untuk 4- tabel level dalam format saat ini.
Peter Cordes
Tentu saja, dengan hugepages 2M atau 1G, itu hanya 4 atau 3 level tabel halaman dari tingkat atas ke entri tabel halaman besar, bukan penunjuk direktori halaman.
Peter Cordes
6

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.

linzuojian.dll
sumber
4

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

Anand K Enamandram
sumber
Pertanyaan ini menanyakan tentang ukuran ruang alamat virtual 48-bit (mengharuskan alamat virtual menjadi kanonis). Anda memang menginginkan lebih banyak bit virtual daripada bit fisik, jadi kernel high-half dapat memetakan semua memori fisik ke dalam satu ruang alamat (itu sendiri atau ruang pengguna). Seperti yang Anda katakan, HW hanya perlu mengimplementasikan bit PA sebanyak yang dapat digunakan oleh pengontrol DRAM + MMIO, dan dapat menggunakan angka apa pun hingga batas 52-bit dalam format tabel halaman x86-64. ( Mengapa di 64bit alamat virtual 4 bit pendek (panjang 48bit) dibandingkan dengan alamat fisik (panjang 52 bit)? )
Peter Cordes
1
Format tabel halaman 4 tingkat juga menerapkan batas VA 48-bit, hingga HW + SW mendukung tabel halaman PML5 untuk VA 57-bit. Bagaimanapun, ini adalah jawaban yang berguna, tetapi tampaknya diposting di bawah pertanyaan yang salah. Saya tidak yakin apakah ada tempat yang lebih baik untuk itu, jadi saya kira kita bisa meninggalkannya di sini, semoga dengan edit untuk menambahkan tajuk untuk mengatakan sesuatu tentang PA vs. VA.
Peter Cordes
2

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.

hafiz031
sumber
Saya pikir Anda telah membuat maksud Anda sangat jelas, ada satu hal yang saya tidak mengerti dalam apa yang Anda katakan tentang CPU 16 bit 8086: bagaimana CPU 16 bit menangani alamat 20 bit? Apakah itu menanganinya melalui operasi 2 langkah? Bahkan jika bus alamat memiliki lebar 20 bit, setelah mencapai CPU, lebar register jelas hanya dapat mengambil 16 bit ... Bagaimana mereka melakukannya?
programmer
2
Hmm ... 2 langkah operasi. Segmen register hanya berisi 16 bit atas. Kemudian dikalikan dengan 10H sehingga menjadi 20 bit dan kemudian offset ditambahkan.
hafiz031
1

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:

alamat kanonik harus memiliki bit 63 hingga 48 yang disetel ke nol atau satu (tergantung pada apakah bit 47 adalah nol atau satu)

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.

Sistem terjemahan memori AArch64 mendukung alamat virtual 49-bit (48 bit per tabel terjemahan). Alamat virtual sign- diperpanjang dari 49 bit, dan disimpan dalam pointer 64-bit. Secara opsional, di bawah kendali register sistem, 8 bit paling signifikan dari penunjuk 64-bit mungkin memiliki "tag" yang akan diabaikan saat digunakan sebagai alamat pemuatan / penyimpanan atau target dari cabang tidak langsung

Olsonist
sumber
1
Hanya 48 yang lebih rendah yang signifikan, tetapi perangkat keras memeriksa bahwa itu benar-benar diperpanjang ke 64 bit. IDK mengapa mereka tidak menentukan ekstensi nol; mungkin mereka ingin membuatnya lebih nyaman untuk memeriksa alamat setengah tinggi vs. rendah (hanya dengan memeriksa sedikit tanda). Atau mungkin untuk menghindari membuat batas 2 ^ 48 menjadi khusus, sehingga alamat di dekat bagian atas dapat dengan mudah masuk ke dalam konstanta perluasan tanda 32-bit. Saya pikir yang terakhir lebih mungkin.
Peter Cordes
Bagaimanapun, pemeriksaan HW saat ini untuk kanonik mencegah perangkat lunak menggunakan bit yang diabaikan untuk penunjuk yang diberi tag yang akan rusak pada HW di masa mendatang, jadi ini adalah bagian dari mekanisme yang memungkinkan untuk memperpanjang perangkat keras di masa depan jika / saat diperlukan. (Yang bisa lebih cepat daripada yang mereka harapkan, berkat memori non-volatile yang dihubungkan langsung ke ruang alamat fisik dan virtual.)
Peter Cordes
procfs di Linux pada Core i5 saya mengatakan bahwa ia akan dipetakan ke 7ffd5ea41000-7ffd5ea62000. Rentang alamat ini masuk akal menurut aturan 'kanonis' di atas. Bit 48-63 adalah 0 menjadikannya alamat kanonik yang benar. Yang sedikit aneh adalah beberapa alamat di sumber Linux. Di include / asm / pgtable_64_types dikatakan #define __VMALLOC_BASE _AC (0xff92000000000000, UL). Ini BUKAN alamat kanonik. Alamat seperti itu akan dimulai dengan 0xffff8. Tidak tahu kenapa.
Olsonist
Ya, IIRC Linux menggunakan separuh rendah rentang kanonik untuk ruang pengguna, dan (kebanyakan) menggunakan separuh tinggi untuk pemetaan khusus kernel. Tetapi beberapa memori kernel diekspor ke ruang pengguna, seperti [vsyscall]halaman. (Itu mungkin mengekspor barang-barang seperti PID saat ini sehingga itu getpid()murni ruang pengguna. Juga gettimeofday()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.)
Peter Cordes
IDK apa __VMALLOC_BASE. Agaknya itu tidak digunakan secara langsung.
Peter Cordes
0

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.


  • Meskipun CPU N-bit mungkin memiliki beberapa entitas selain ukuran N. Misalnya impovments di 6809 di atas 6800 (keduanya adalah CPU 8-bit dengan data-bus 8-bit). Di antara peningkatan signifikan yang diperkenalkan pada 6809 adalah penggunaan dua akumulator 8-bit (A dan B, yang dapat digabungkan menjadi satu register 16-bit, D), dua register indeks 16-bit (X, Y) dan dua Penunjuk tumpukan 16-bit.
Amit G.
sumber
Sudah ada jawaban yang menjelaskan hal ini dengan Motorola 68000/68020 sebagai contoh. Pertanyaan ini sebenarnya tentang x86-64 secara khusus, bukan CPU 8/16-bit yang lama. Dalam kasus x86-64, salah satu faktor utamanya adalah bahwa alamat virtual yang lebih luas memerlukan tabel halaman yang lebih dalam, dan faktor itu tidak ada untuk chip lama yang Anda bicarakan.
Peter Cordes
lebar data-bus tidak harus sesuai dengan register atau lebar ALU. Misalnya, P5 Pentium memiliki bus data 64-bit (beban / penyimpanan 64-bit yang selaras dijamin atomic), tetapi register / ALU hanya 32 bit (kecuali untuk FPU terintegrasi, dan di Pentium MMX yang lebih baru, SIMD) ALUs.)
Peter Cordes
OP menulis: "Harapan saya adalah jika itu adalah prosesor 64-bit, ruang alamat juga harus 2 ^ 64." ........ Anda menulis: "Pertanyaan ini benar-benar tentang x86-64 secara khusus, bukan CPU 8/16-bit yang lama". ........ Saya pikir Anda melewatkan esensi pertanyaan OP. Pertanyaan OP adalah hasil dari asumsi yang salah bahwa CPU 64-bit harus memiliki bus alamat 64-bit. Tentang ALU, saya menulis sebagian besar entitasnya; Tidak semuanya.
Amit G.22
Berhenti mengirimi saya spam dengan memposting ulang komentar ini. Ya tentu saja OP salah untuk alasan yang Anda gambarkan, tetapi saya telah menunjukkan bahwa jawaban Anda sepertinya membuat kesalahan yang serupa. Anda mengatakan " dan akibatnya sebagian besar dari entitasnya: Register dan Akumulator, Arithmetic-Logic-Unit (ALU) ... ", yang terdengar seperti Anda mengatakan bahwa hal-hal itu cocok dengan lebar bus data. Frasa "sebagian besar" menyiratkan bahwa Anda mengatakan bagian mana , bukan hanya terkadang benar untuk bagian itu.
Peter Cordes