Pertanyaan Alamat memori PCI BAR


Pertanyaan cepat, saya sedang membaca halaman Wiki OSDev tentang PCI dan mengatakan hal berikut -

Alamat dasar Register (atau BAR) dapat digunakan untuk menyimpan alamat memori yang digunakan oleh perangkat, atau offset untuk alamat port. Biasanya, alamat memori BAR harus ditempatkan di ram fisik sementara I / O ruang BAR dapat berada di alamat memori (bahkan di luar memori fisik). '

Saya tidak mengerti di mana katanya memory address BARs need to be located in physical ram. Inti dari MMIO adalah bahwa ia diberi alamat memori sehingga akan dialihkan ke perangkat dan tidak ke RAM fisik. Apa artinya dengan itu perlu ditempatkan di RAM fisik?

Bukankah itu hanya menjadi alamat antara ruang 3GB - 4GB, terlepas dari berapa banyak RAM fisik yang diinstal?

Apakah ini kesalahan di situs OSDev atau saya salah mengerti?

tautan - Sekitar setengah jalan, di bawah pos Alamat Dasar Mendaftar


4
2018-04-26 20:50


asal


@Hennes, tautan ditambahkan. - RJSmith92
Saya baru saja membaca ulang bagian ini: "Khas, alamat memori BAR harus ditempatkan di ram fisik sementara I / O ruang BAR dapat berada di alamat memori (bahkan di luar memori fisik) ". - Hennes
@Hennes Saya tidak yakin apa yang Anda maksud? alamat memori BAR tidak ada hubungannya dengan RAM fisik, kan? - RJSmith92


Jawaban:


Saya percaya ada beberapa kebingungan di sini, karena ada perbedaan antara perangkat I / O dan non-I / O.
Dari wikipedia I / O yang dipetakan memori (MMIO) :

I / O yang dipetakan memori   menggunakan bus alamat yang sama untuk mengatasi kedua memori dan perangkat I / O -   memori dan register dari perangkat I / O dipetakan ke (terkait   dengan) nilai alamat. Jadi ketika alamat diakses oleh CPU, itu   dapat merujuk ke sebagian RAM fisik, tetapi juga bisa merujuk ke   memori perangkat I / O. Jadi, instruksi CPU digunakan untuk mengakses   memori juga dapat digunakan untuk mengakses perangkat. Setiap perangkat I / O   memonitor bus alamat CPU dan merespon setiap akses CPU dari suatu   alamat yang ditetapkan untuk perangkat itu, menghubungkan bus data ke   perangkat keras perangkat yang diinginkan mendaftar. Untuk mengakomodasi perangkat I / O,   area alamat yang digunakan oleh CPU harus disediakan untuk I / O dan   tidak boleh tersedia untuk memori fisik normal.

Dari artikel Anda:

Alamat dasar Register (atau BAR) dapat digunakan untuk menyimpan alamat memori   digunakan oleh perangkat, atau offset untuk alamat port. Khas, ingatan   alamat BAR harus ditempatkan di ram fisik sementara ruang I / O   BAR dapat berada di alamat memori (bahkan di luar memori fisik).

image

Field Type dari Memory Space BAR Layout menentukan ukuran   register basis dan di mana dalam memori dapat dipetakan. Jika memiliki   nilai 0x00 maka register basis adalah lebar 32-bit dan bisa dipetakan   di mana saja di Ruang Memori 32-bit. Nilai 0x02 berarti basis   register lebar 64-bit dan bisa dipetakan di mana saja di 64-bit   Ruang Memori (A register alamat dasar 64-bit mengkonsumsi 2 dari basis   alamat register tersedia).

Jadi tidak ada konflik antara keduanya, karena semuanya tergantung pada perangkat. Jika perangkat memotong referensi memori di bus, maka alamatnya virtual. Jika tidak, maka itu adalah alamat fisik nyata yang digunakan untuk berkomunikasi dengan perangkat (misalnya NVRAM).

Namun, dalam semua kasus, alamat fisik yang sebenarnya digunakan untuk perangkat I / O, karena instruksi komputer yang merujuk padanya hanya dapat menggunakan alamat sebenarnya. Memori ini mungkin terbuang jika perangkat mencegat referensi untuk itu. Untuk menghindari pemborosan tersebut, sistem operasi biasanya akan mengalokasikannya di luar memori fisik nyata (ini tidak akan menyebabkan kesalahan akses memori yang buruk, karena perangkat akan mencegat semua referensi).

Ini adalah alasan untuk masalah komputer Windows 32-bit yang terkenal tampaknya tidak bisa menggunakan seluruh memori 4 GB. Alasannya adalah Windows, karena 32-bit, mengalokasikan memori perangkat menggunakan alamat nyata, yang kemudian menjadi tidak tersedia untuk kedua kasus: apakah memori yang dialamatkan benar-benar digunakan, atau tidak digunakan karena disadap oleh perangkat.

Artikel wikipedia berguna lainnya adalah: Ruang konfigurasi PCI.


3
2018-04-29 10:54



Terima kasih atas jawabannya tetapi saya masih belum memahaminya. Sebagai contoh jika kita memiliki sistem 32 bit dengan memori 2GB dan perangkat PCI diperlukan 128MB tidak akan BIOS / OS menetapkannya dalam rentang memori antara rentang ruang alamat 3GB dan 4GB. Apa yang harus dilakukan dengan 'perlu ditempatkan dalam RAM fisik'? - RJSmith92
Tidak harus terletak di RAM fisik, dan untuk perangkat I / O biasanya tidak terletak di RAM. Itu hanya menggunakan alamat RAM fisik, alamat yang kemudian tidak dapat digunakan untuk hal lain bahkan jika ada RAM nyata di alamat ini. Dalam contoh Anda, jika perangkat menyadap alamat, maka ya, OS sebaiknya menggunakan alamat yang tidak ada atau ini akan memakan RAM asli. - harrymc
Untuk contoh yang terlalu sederhana: komputer yang memiliki 2GB mengalokasikan buffer hard disk pada 3GB. OS menggunakan instruksi perangkat keras untuk menulis atau membaca dari alamat 3GB. Pengontrol disk memotong ini dan mengubahnya untuk membaca atau menulis pada hard disk. Instruksi perangkat keras dalam instruksi 32-bit hanya dapat merujuk ke alamat dalam kisaran 0 hingga 4GB, sehingga memori driver yang dialokasikan perlu dipetakan ke kisaran tersebut agar dapat dialamatkan. Alamat tidak harus ada untuk dapat dialamatkan. - harrymc
Saya mengerti itu tapi maksud saya adalah mengapa ia mengatakan 'terletak di RAM fisik'? Apa yang harus dilakukan RAM fisik dengan ini? Saya tahu ini menggunakan ruang alamat RAM fisik (biasanya antara 3GB dan 4GB). Apakah Anda pikir itu artinya? - RJSmith92
Ya, itu dia. Itu alamat adalah RAM fisik. Saya pikir masalah Anda adalah dengan kata "terletak", yang saya rasa agak tidak pantas di sini. "Dipetakan" mungkin lebih baik. Alamatnya hanya angka yang diletakkan di bus dan itu, kecuali dicegat oleh beberapa perangkat, ditangani secara default oleh pengontrol memori (sendiri hanya perangkat lain). Dalam chip itu sendiri tentu saja pelaksanaannya sangat dioptimalkan dan tidak sesederhana itu, tetapi secara global itulah mekanisme yang digunakan dan cara menjelaskannya kepada orang awam. - harrymc