Bagaimana cara kerja pengontrol DMA?

14

Dari Bagian 5.1.4 Akses Memori Langsung dalam Sistem Operasi Modern oleh Andrew S. Tanenbaum, Herbert Bos, 2014 ,

Untuk menyederhanakan penjelasan, kami mengasumsikan bahwa CPU mengakses semua perangkat dan memori melalui bus sistem tunggal yang menghubungkan CPU, memori, dan perangkat I / O, seperti yang ditunjukkan pada Gambar 5-4.

masukkan deskripsi gambar di sini

  1. Untuk menjelaskan cara kerja DMA, mari kita lihat dulu bagaimana pembacaan disk terjadi ketika DMA tidak digunakan.

    • Pertama pengontrol disk membaca blok (satu atau lebih sektor) dari drive secara serial, sedikit demi sedikit, sampai seluruh blok ada di buffer internal pengontrol.
    • Selanjutnya, itu menghitung checksum untuk memverifikasi bahwa tidak ada kesalahan baca telah terjadi. Kemudian controller menyebabkan interupsi. Ketika sistem operasi mulai berjalan, ia dapat membaca blok disk dari buffer pengontrol satu byte atau satu kata setiap saat dengan menjalankan loop, dengan setiap iterasi yang membaca satu byte atau kata dari perangkat pengontrol mendaftar dan menyimpannya dalam memori utama.

    T: pada langkah kedua,

    • bukankah data ditransfer " dari buffer controller " ke memori utama? Mengapa dikatakan " dari buffer controller " dan " dari register perangkat controller "?

    • pada langkah kedua, dapatkah pengontrol mentransfer data dari buffernya ke memori utama, tanpa mengganggu cpu, dan tanpa melibatkan OS lagi?

  2. Ketika DMA digunakan, prosedurnya berbeda.

    • Pertama-tama CPU memprogram pengontrol DMA dengan mengatur registernya sehingga ia tahu apa yang harus ditransfer ke mana (langkah 1 pada Gambar 5-4).
      Ini juga mengeluarkan perintah ke pengontrol disk yang memerintahkannya untuk membaca data dari disk ke buffer internal dan memverifikasi checksum.
    • Ketika data yang valid ada di buffer pengontrol disk, DMA dapat dimulai. Pengontrol DMA memulai transfer dengan mengeluarkan permintaan baca melalui bus ke pengontrol disk (langkah 2). Permintaan baca ini terlihat seperti permintaan baca lainnya, dan pengontrol disk tidak tahu (atau peduli) apakah itu berasal dari CPU atau dari pengontrol DMA. Biasanya, alamat memori untuk menulis berada pada baris alamat bus, jadi ketika pengontrol disk mengambil kata berikutnya dari buffer internal, ia tahu di mana harus menulisnya. Tulis ke memori adalah siklus bus standar lain (langkah 3).
    • Saat penulisan selesai, pengontrol disk mengirimkan sinyal pengakuan ke pengontrol DMA, juga melewati bus (langkah 4). Pengontrol DMA kemudian menambah alamat memori untuk digunakan dan mengurangi jumlah byte. Jika jumlah byte masih lebih besar dari 0, langkah 2 hingga 4 diulangi hingga hitungannya mencapai 0.
    • Pada saat itu, pengontrol DMA mengganggu CPU untuk memberi tahu bahwa transfer telah selesai. Ketika sistem operasi dimulai, ia tidak harus menyalin blok disk ke memori; sudah ada di sana.

    T: pada langkah kedua, pengontrol DMA meminta pengontrol disk untuk mentransfer data dari buffer pengontrol disk ke memori utama. Pada langkah pertama, CPU mengeluarkan perintah ke pengontrol disk yang memerintahkannya untuk membaca data dari disk ke buffer internal. Pada saat yang sama, dapatkah CPU juga memberi tahu pengontrol disk untuk mentransfer data dari buffer pengontrol disk ke memori utama, ketika pengontrol disk selesai mentransfer data dari disk ke buffer pengontrol disk, sehingga tidak perlu untuk Pengontrol DMA untuk memberi tahu pengontrol disk untuk mentransfer data dari buffer pengontrol disk ke memori utama? (Saya tidak mengerti mengapa kita membutuhkan pengontrol DMA untuk transfer data antara disk dan memori utama, jadi tebak bahwa saya melewatkan sesuatu yang penting untuk memahami kutipan).

  3. Pengontrol perangkat perangkat mengontrol perangkat dan melakukan operasi pada perangkat. Perangkat apa yang dikendalikan oleh pengendali DMA dan menjalankan operasi?

Terima kasih!

Tim
sumber
Sepertinya pemahaman Anda didasarkan pada Bus Mastering, yang saya kira lebih modern daripada konsep DMA yang dijelaskan dalam buku teks itu. Konsep DMA dalam buku teks lebih primitif.
rwong
Saya menambahkan diagram untuk model sederhana yang digunakan buku ini.
Tim
Panah 3 pada diagram tampaknya tidak cocok dengan deskripsi teks ... selamat. Untuk menentukan mana yang benar, diagram timing bus untuk langkah 3 akan diperlukan. Lebih penting lagi, seseorang perlu mencari tahu perangkat mana yang bertanggung jawab untuk menahan sinyal data pada langkah 3. Apakah pengontrol disk mengirimkan data ke pengontrol DMA terlebih dahulu, dan kemudian pengontrol DMA mengulangi data (meletakkan voltanya sendiri ke dalam bus ) ke memori?
rwong
"Ack" pada langkah 4 juga mencurigakan. Bukankah DMA sudah tahu jumlah byte yang akan disalin?
rwong
Tidak yakin cara mengklarifikasi. Buku apa pada OS dan arsitektur yang Anda pelajari atau menurut Anda adalah yang terbaik?
Tim

Jawaban:

7

Q1

Pada langkah pertama, kita TIDAK menggunakan DMA, sehingga konten pengontrol disk dibaca sepotong demi sepotong oleh prosesor. Prosesor tentu saja (dengan asumsi data benar-benar akan digunakan untuk sesuatu, dan tidak hanya dibuang) menyimpannya dalam memori sistem.

Buffer dalam hal ini adalah sepotong memori pada hard-disk (pengontrol) itu sendiri, dan perangkat pengontrol mendaftarkan register kontrol dari hard-disk (pengontrol) itu sendiri.

Tidak melibatkan OS (atau perangkat lunak lain) akan memerlukan semacam operasi DMA, dan bagian teks yang Anda diskusikan di bagian pertanyaan ini BUKAN menggunakan DMA. Jadi, tidak, itu tidak akan terjadi dalam kasus ini.

Q2

Jadi, inti dari pengontrol DMA adalah untuk "melakukan tugas yang membosankan untuk menyimpan barang-barang dari buffer internal perangkat ke dalam memori utama". CPU akan bekerja dengan pengontrol DMA dan perangkat disk. Jika disk bisa melakukan ini sendiri, tidak perlu controller DMA.

Dan memang, dalam sistem modern, kemampuan DMA biasanya dibangun ke dalam pengontrol cakram keras itu sendiri, dalam arti pengontrol memiliki kemampuan "bus mastering", yang berarti bahwa pengontrol itu sendiri adalah pengontrol DMA untuk perangkat. Namun, untuk melihatnya sebagai dua perangkat terpisah membuat keseluruhan konsep DMA sedikit kurang sulit untuk dipahami.

Q3 (jenis)

Jika Anda menganggap hard disk sebagai tumpukan batu bata yang baru saja dikirim ke lokasi pembangunan, dan prosesornya adalah tukang batu yang meletakkan batu bata untuk membangun rumah. Pengendali DMA adalah pekerja yang membawa batu bata dari tumpukan batu bata ke tempat mereka diperlukan untuk tukang batu, yang berarti bahwa tukang batu dapat berkonsentrasi pada melakukan pekerjaan yang sebenarnya dari meletakkan batu bata (yang merupakan pekerjaan terampil, jika Anda pernah mencobanya diri Anda sendiri), dan pekerjaan sederhana "mengambil dan membawa" dapat dilakukan oleh pekerja yang kurang terampil.

Bukti anekdotal: Ketika saya pertama kali belajar tentang transfer DMA dari disk ke memori sekitar tahun 1997 atau lebih ketika pengendali IDE mulai menggunakan DMA, dan Anda perlu mendapatkan driver "motherboard IDE controller" untuk memungkinkan IDE melakukan DMA, dan pada saat itu , membaca dari hard-disk akan memakan waktu sekitar 6-10% dari waktu CPU, di mana DMA dalam pengaturan yang sama akan menggunakan sekitar 1% dari waktu CPU. Sebelum waktu itu, hanya sistem mewah dengan pengontrol disk SCSI yang akan menggunakan DMA.

Mats Petersson
sumber
5

Ini bukan jawaban; itu adalah permintaan untuk klarifikasi yang terlalu panjang untuk dimuat di komentar.

Sebelum ada yang bisa menjawab pertanyaan ini, kita harus menjelaskan dengan jelas arsitektur sistem komputer yang sedang dibahas. Yaitu:

  • Apa sajakah sistem bus yang terlibat dalam uraian ini?

    • Sebagian besar sistem komputer memiliki bus memori.
    • Sebagian besar komputer memiliki sistem bus jenis lain juga.
  • Apakah disk IO melewati bus memori juga?

    • Dengan kata lain, apakah disk menggunakan jalur bus alamat untuk alamat, dan jalur bus data untuk data?
  • Apakah pengontrol disk melihat bus memori sebagai ...

    • Bus memori? Artinya, ia berpikir sedang berbicara dengan chip memori; yaitu RAS (akses strobo baris), CAS (akses strobo kolom), ...
    • Sangat tidak mungkin - berbicara dengan chip memori mengharuskan seseorang menjadi sangat tepat tentang mengeluarkan perintah sesuai dengan waktu DRAM (latensi) - beberapa siklus clock terlalu dini atau terlambat, kehilangan data akan terjadi.
  • Jadi ... apa yang menurut disk controller bus "sebenarnya"?

  • Dalam kebanyakan sistem komputer, ada semacam IO yang disebut "Port I / O".

    • Port I / O dapat mendukung perjalanan ke bus memori, atau mereka mungkin memiliki bus khusus lainnya.
    • Ciri khas Port I / O adalah bahwa seseorang dapat menyelesaikan berbagai hal dalam satu siklus bus (atau jumlah konstan yang telah ditentukan sebelumnya) - tidak perlu khawatir tentang bahaya pengaturan waktu DRAM.
  • Dalam sistem yang lebih maju (baik, sejak dua dekade lalu), ada jenis sistem bus yang lebih baru. Misalnya, ISA, PCI, AGP, PCMCIA ... SCSI, ATA, SAS, SATA, FC-AL ...


Sekarang, dengan begitu banyak ketidakpastian yang muncul tentang "sistem komputer yang sedang dibahas", Anda dapat memahami mengapa Anda tidak akan mendapatkan jawaban yang jelas untuk pertanyaan Anda.

Ya, saya tahu itu berasal dari buku pelajaran. Anda punya salinannya. Bukan saya. (Tidak di rumah - ada satu di kantor.) Oleh karena itu, jika Anda butuh jawaban, Anda perlu menunjukkan beberapa diagram dan menjelaskan seperti apa sistem bus komputer Anda.


Pada intinya, meskipun:

  • DMA adalah perangkat yang dapat diprogram. Artinya, CPU memiliki tanggung jawab penuh untuk memberi tahu DMA apa yang harus dilakukan. Tentu saja, selama slot waktu di mana DMA mengambil alih sistem, CPU akan bekerja sama dengan membiarkan DMA menjalankan pertunjukan.

  • Di bawah kendali CPU (dan OS yang menjalankannya), DMA memiliki kemampuan untuk mengambil alih kendali untuk satu atau lebih bus (jamak) untuk memfasilitasi transfer data dari pengontrol disk ke memori utama.

  • Selama jangka waktu di mana DMA mengambil alih bus (jamak), DMA akan mengeluarkan perintah di atas bus itu - yaitu menggantikan controller yang biasa, yaitu DMA berpura-pura sedang melakukan pekerjaan CPU.

  • Jika transfer data melibatkan dua bus yang berbeda, DMA mungkin harus melakukan ini ke bus yang berbeda.

  • Agar dapat memindahkan sejumlah byte (kata, dll), DMA berisi penghitung lingkaran untuk melacak jumlah data yang tersisa untuk disalin.

  • Untuk dapat menulis ke memori utama, DMA berisi register alamat memori, yang dapat diprogram oleh CPU, sehingga CPU dapat memberi tahu DMA ke mana harus menulis data.

  • Bergantung pada desain bus sistem, DMA mungkin atau mungkin tidak harus berurusan dengan detail mengerikan dari siklus waktu DRAM.

  • Sekali waktu, beberapa saat setelah DMA ditemukan, beberapa perangkat periferal mulai mengemas DMA ke pengendali mereka - ini disebut Bus Mastering . Namun, apakah DMA duduk pada paket CPU, motherboard, atau kartu I / O, itu harus pada akhirnya berada di bawah kendali (pemrograman) CPU, karena mereka entah bagaimana harus menegosiasikan akses ke bus sistem (jamak), dan memori utama.

  • Sistem komputer modern memiliki subsistem khusus yang disebut DRAM Controller. Jika ada, hampir pasti bahwa DRAM Controller ini juga akan memenuhi fungsi DMA, yaitu, sepertinya itu adalah "byte copying loop" yang dapat diprogram, dan semua kompleksitas yang disebutkan di atas tersembunyi di dalam silikon DRAM. Pengendali.


Jika Anda merasa sangat membingungkan - saya juga bingung - Anda perlu diagram. Banyak diagram. Diagram sistem. Diagram bus. Diagram waktu. Diagram transisi negara. dll.


rwong
sumber