


Adakah terdapat sebarang kod sumber untuk pemacu Windows DMA?
Operasi DMA yang berkaitan diperkenalkan pada halaman 545 "Pemahaman Mendalam tentang Kernel Linux". Apabila bercakap tentang DMA, kita perlu menyebut isu Cache. Buku itu memetik contoh berikut untuk menerangkan masalah ketekalan Cache:
Anggap bahawa pemacu peranti mengisi beberapa data ke dalam penimbal memori, dan kemudian segera mengarahkan peranti perkakasan untuk membaca data menggunakan pemindahan DMA. Jika DMA mengakses sel memori RAM fizikal ini, dan kandungan baris cache perkakasan yang sepadan belum lagi ditulis kepada RAM, maka peranti perkakasan membaca paling banyak nilai lama dalam penimbal memori.
Kini terdapat dua cara untuk menangani penimbal DMA:
Pemetaan DMA yang konsisten:
Buku ini lebih abstrak Dari segi orang awam, sebarang penulisan semula penimbal DMA akan dikemas kini terus ke dalam ingatan, juga dikenali sebagai It is. tanah yang disegerakkan atau tanah yang konsisten.
Strim pemetaan DMA:
Menurut pemahaman peribadi, aliran di sini ialah aliran input dan output Kita perlu menentukan arah penimbal DMA terlebih dahulu, seperti sama ada untuk membaca penimbal atau menulis penimbal. Ia juga dipanggil tak segerak atau tidak konsisten Sila lihat di bawah untuk mendapatkan butiran.
Oleh kerana dalam seni bina x86, pemacu peranti perkakasan itu sendiri akan mengintip cache perkakasan yang diakses, jadi tiada masalah konsistensi DMA dalam seni bina x86. Untuk seni bina lain seperti MIPS, SPARC dan POWERPC (termasuk ARM), adalah perlu untuk memastikan konsistensi DMA mereka dalam perisian.
Terdapat cadangan yang sesuai dalam buku tentang cara memilih antara dua di atas Jika CPU dan pemproses DMA mengakses penimbal dengan cara yang tidak dapat diramalkan, maka kaedah pemetaan DMA yang konsisten mesti dipaksa untuk digunakan (di sini saya bercakap. tentang yang tidak dapat diramalkan Memahami bahawa tidak mungkin untuk menentukan bila mereka mengakses penimbal). Dalam kes lain, kaedah pemetaan DMA penstriman adalah lebih baik, kerana menangani pemetaan DMA yang konsisten adalah menyusahkan pada sesetengah seni bina dan boleh mengakibatkan prestasi sistem yang lebih rendah.
Berikut adalah pengenalan terperinci kepada penstriman DMA:
Penimbal yang perlu diakses perlu dipetakan sebelum penghantaran data (pemetaan di sini bermakna beberapa fungsi perlu dipanggil untuk memaklumkan kernel bahawa penimbal distrim), dan dibatalkan selepas pemetaan.
Memulakan pemindahan data DMA terbahagi kepada langkah berikut:
1.
Apabila peranti DMA tidak menggunakan mod S/G (scatter/gather), ia mesti dipastikan bahawa buffer adalah berterusan secara fizikal Kernel Linux mempunyai dua fungsi untuk memperuntukkan memori berterusan: kmalloc() dan __get_free_pages( ). Kedua-dua fungsi mempunyai nilai maksimum untuk memperuntukkan memori berterusan kmalloc memperuntukkan bait sebagai unit, maksimum ialah kira-kira 64KB, __get_free_pages() memperuntukkan halaman sebagai unit, dan boleh memperuntukkan maksimum 2^ nombor pesanan halaman parameter pesanan Ditentukan oleh makro MAX_ORDER dalam fail include/linux/Mmzone.h (dalam versi kernel lalai 2.6.18, makro ini ditakrifkan sebagai 10. Maksudnya, secara teori, fungsi __get_free_pages boleh memohon sehingga kepada 1
2 pada satu masa. Wujudkan pemetaan Penstriman
Selepas membaca dan menulis akses kepada penimbal DMA, dan sebelum memulakan pemindahan peranti DMA, dayakan fungsi dma_map_single() untuk mewujudkan pemetaan DMA penstriman ini alamat linear penimbal sebagai parameternya dan Kembalikan alamat bas yang sepadan
3 Lepaskan pemetaan penstriman
Apabila pemindahan DMA selesai, kami perlu melepaskan fungsi dma_unmap_single()
(1). Untuk mengelakkan caching. Untuk masalah konsisten, pemacu harus memanggil fungsi dma_sync_for_device() untuk menyegarkan talian cache yang sepadan dengan penimbal DMA jika perlu
(2). akses penimbal memori sebelum pemindahan data DMA selesai, tetapi jika perlu, pemacu harus memanggil fungsi dma_sync_single_for_cpu() untuk membatalkan baris cache perkakasan yang sepadan sebelum membaca penimbal
(3). juga dilaksanakan menggunakan __get_free_pages, fungsi penimbal keluaran yang sepadan dengan kmalloc ialah kfree, dan fungsi penimbal keluaran yang sepadan dengan __get_free_pages ialah free_pages Beberapa fungsi aplikasi dan keluaran yang berkaitan dengan __get_free_pages adalah seperti berikut:
Fungsi aplikasi:
alf_p_pages. order) mengembalikan alamat deskriptor bingkai halaman pertama yang diperuntukkan, atau NULL jika peruntukan gagal __get_free_pages(gfp_mask,order) adalah serupa dengan alloc_pages(), tetapi ia mengembalikan deskriptor bingkai halaman pertama. Jika anda perlu mendapatkan nombor bingkai halaman yang sepadan dengan alamat linear, anda perlu memanggil makro virt_to_page(addr) untuk menjana alamat linear Fungsi keluaran: __free_pages(halaman, pesanan) di sini terutamanya menekankan bahawa halaman itu akan dikeluarkan. penimbal. Nombor bingkai halaman di mana alamat pertama linear terletak free_pages(halaman, pesanan) Fungsi ini serupa dengan __free_pages(halaman, pesanan), tetapi parameter yang diterima ialah penambah alamat linear bagi bingkai halaman pertama yang akan dikeluarkan
Atas ialah kandungan terperinci Adakah terdapat sebarang kod sumber untuk pemacu Windows DMA?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Windows 11 KB5054979 Kemas kini: Panduan Pemasangan dan Penyelesaian Masalah Untuk versi Windows 11 24H2, Microsoft telah mengeluarkan kemas kini kumulatif KB5054979, yang merangkumi beberapa penambahbaikan dan pembetulan pepijat. Artikel ini akan membimbing anda tentang cara memasang kemas kini ini dan memberikan penyelesaian kepada kegagalan pemasangan. Mengenai Windows 11 24h2 KB5054979 KB5054979 telah dikeluarkan pada 27 Mac, 2025 dan merupakan kemas kini keselamatan untuk Windows 11 24H2 Versions.NET Framework 3.5 dan 4.8.1. Kemas kini ini meningkatkan keselamatan dan

Patch KB5053602, yang dikeluarkan pada 11 Mac, 2025, mensasarkan edisi Windows 11 22H2 dan 23H2, mengangkat OS ke OS membina 22621.5039 dan 22631.5039, Menghormati

Windows 10 KB5053606 Pemasangan Kemas Kini Gagal? Panduan ini menyediakan penyelesaian yang berkesan! Ramai pengguna menghadapi masalah untuk memasang kemas kini Windows 10 KB5053606 yang dikeluarkan pada hari Selasa patch Microsoft Mac 2025, seperti gangguan sambungan SSH, isu -isu editor kaedah dwm.exe, atau input editor (IME). Kemas kini mungkin terjebak semasa memuat turun atau pemasangan, atau kod ralat mungkin muncul, seperti 0x800F0922, 0xd000034, 0x80070437 dan 0x80072efe. KB5053606 Kegagalan pemasangan biasanya disebabkan oleh pelbagai sebab, termasuk kegagalan komponen kemas kini Windows, rasuah fail sistem, dan cakera

Tag ralat "sesuatu yang salah" 7Q6CH di Microsoft Office mengganggu aliran kerja anda semasa tugas penting seperti membuat dokumen atau mengendalikan e -melnya

Kemas kini Microsoft's 11 Mac, 2025, KB5053598, adalah patch penting untuk Windows 11 24H2 (OS Build 26100.3476). Panduan Minitool ini merangkumi semua yang anda perlu ketahui, termasuk masalah pemasangan masalah. Apa yang baru di KB5053598? Dibebaskan pada

GTA 5 Enhanced ERR_GFX_D3D_NOD3D12 Panduan Betulkan Ralat Grand Theft Auto V Enhanced (GTA 5 Enhanced) adalah permainan yang dinaik taraf, tetapi beberapa pemain menghadapi "err_gfx_d3d_nod3d12: DirectX 12 Adapter atau Runner Found" ralat apabila bermula. Artikel ini menyediakan beberapa penyelesaian. Punca ralat: Kesalahan ini biasanya menunjukkan bahawa sistem anda hilang perpustakaan runtime DirectX 12 atau kad grafik DirectX 12 yang serasi. Penyelesaian: Kaedah 1: Pasang Perpustakaan Runtime DirectX Pemeriksaan

Windows 11 menerima kemas kini tetap untuk meningkatkan keselamatan, menetapkan pepijat, dan memperkenalkan ciri -ciri baru. Salah satu aspek proses kemas kini ini adalah patch pada hari Selasa, yang berlaku

Menguasai Lokasi dan Perlindungan Simpan AI Limit: Panduan Komprehensif Merancang untuk menyelam ke RPG Sci-Fi yang penuh aksi, Limit AI, melancarkan 27 Mac, 2025? Memahami lokasi simpan fail anda dan melaksanakan kaedah perlindungan yang mantap adalah
