Mengapa perangkat PCI berbagi ruang alamat yang sama?

0

Ketika komputer dinyalakan, BIOS atau sistem operasi memeriksa setiap perangkat PCI untuk menanyakan berapa banyak ruang alamat yang diinginkan. Kemudian, ia mengalokasikan ruang yang sesuai dan memberi tahu setiap perangkat PCI di mana ruangnya dimulai, sehingga perangkat PCI dapat menanggapi permintaan baca dan tulis dalam rentang itu.

Pertanyaan saya adalah mengapa semua perangkat perlu dialokasikan blok dari ruang alamat yang sama. Mengapa tidak memberi masing-masing perangkat ruang alamat sendiri?

Pada papan sirkuit tercetak, sudah ada cara "out-of-band" untuk membedakan antara perangkat PCI: jalur IDSEL. Ini adalah apa yang digunakan selama penghitungan PCI, sebelum masing-masing perangkat memiliki ruang yang dialokasikan. Jadi mengapa tidak menggunakannya untuk mengakses post-enumeration juga, dan menyimpan beberapa logika decoding pada perangkat PCI? Apakah itu entah bagaimana lebih lambat, atau sesuatu?

Maxpm
sumber

Jawaban:

1

Sebagai aturan umum, mereka tidak perlu untuk berbagi ruang alamat yang sama. Memisahkan ruang alamat perangkat persis untuk apa IOMMU, dan dapat berguna karena sejumlah alasan:

  • Dengan aman dapat memungkinkan mesin virtual untuk secara langsung mengakses perangkat keras fisik dengan driver asli.
  • Ini memisahkan kemampuan pengalamatan perangkat dari ruang alamat fisik. Dengan kata lain, ini memungkinkan Anda memiliki perangkat yang hanya dapat melakukan pengalamatan data akses 32-bit di mana saja dalam memori fisik, bahkan di atas 4G pertama.
  • Ini memungkinkan Anda mengisolasi perangkat satu sama lain secara lebih menyeluruh, yang secara signifikan dapat meningkatkan keamanan sistem.

Sejauh mengapa ini bukan perilaku default, dan mengapa garis IDSEL tidak digunakan untuk ini, saya tidak bisa mengatakannya, karena saya tidak memiliki banyak pengetahuan tentang sejarah desain PCI. Dugaan pertama saya adalah bahwa itu semula sehingga lebih mudah untuk port driver untuk kartu ISA ke PCI (ISA mengasumsikan ruang alamat berbagi datar). Selain itu, IOMMU bukanlah perangkat yang paling mudah untuk dirancang, dan baru-baru ini tersedia secara luas di platform x86 (dan masih belum dijamin, banyak chip Intel yang belum memilikinya, dan banyak chip AMD kelas bawah jangan salah).

Mungkin perlu menunjukkan bahwa dengan PCI Express, sebenarnya ada keuntungan untuk berbagi ruang alamat di seluruh perangkat, yaitu memungkinkan Anda melakukan transfer perangkat ke perangkat (meskipun sebagian besar platform tidak mendukung hal ini), yang dapat sangat berguna dalam pengaturan kisi besar yang menggunakan RDMA (Anda bisa mendapatkan data dari perangkat jarak jauh secara langsung, tanpa perlu OS sistem jarak jauh untuk dimediasi setelah transfer diatur).

Austin Hemmelgarn
sumber