จากหัวข้อ 5.1.4 การเข้าถึงหน่วยความจำโดยตรงในระบบปฏิบัติการสมัยใหม่โดย Andrew S. Tanenbaum, Herbert Bos, 2014 ,
เพื่อให้คำอธิบายง่ายขึ้นเราสันนิษฐานว่า CPU เข้าถึงอุปกรณ์และหน่วยความจำทั้งหมดผ่านบัสระบบเดียวที่เชื่อมต่อ CPU หน่วยความจำและอุปกรณ์ I / O ดังแสดงในรูปที่ 5-4
เพื่ออธิบายวิธีการทำงานของ DMA ให้เราพิจารณาก่อนว่าการอ่านดิสก์เกิดขึ้นอย่างไรเมื่อไม่ได้ใช้ DMA
- ก่อนอื่นตัวควบคุมดิสก์จะอ่านบล็อก (หนึ่งส่วนขึ้นไป) จากไดรฟ์แบบอนุกรมทีละบิตจนกระทั่งบล็อกทั้งหมดอยู่ในบัฟเฟอร์ภายในของคอนโทรลเลอร์
- จากนั้นคำนวณการตรวจสอบเพื่อตรวจสอบว่าไม่มีข้อผิดพลาดในการอ่านเกิดขึ้น จากนั้นคอนโทรลเลอร์จะทำให้เกิดการขัดจังหวะ เมื่อระบบปฏิบัติการเริ่มทำงานมันสามารถอ่านบล็อกดิสก์จากบัฟเฟอร์ของคอนโทรลเลอร์เป็นไบต์หรือคำในแต่ละครั้งโดยเรียกใช้ลูปโดยการวนซ้ำแต่ละครั้งจะอ่านหนึ่งไบต์หรือหนึ่งคำจากอุปกรณ์ควบคุมรีจิสเตอร์และเก็บไว้ในหน่วยความจำหลัก
ถาม: ในขั้นตอนที่สอง
ไม่ถ่ายโอนข้อมูล " จากบัฟเฟอร์ของคอนโทรลเลอร์ " ไปยังหน่วยความจำหลัก? ทำไมถึงพูดว่า " จากบัฟเฟอร์ของคอนโทรลเลอร์ " และ " จากอุปกรณ์ควบคุมรีจิสเตอร์ "?
ในขั้นตอนที่สองคอนโทรลเลอร์สามารถถ่ายโอนข้อมูลจากบัฟเฟอร์ไปยังหน่วยความจำหลักโดยไม่รบกวนการทำงานของ cpu และไม่เกี่ยวข้องกับระบบปฏิบัติการอีกครั้ง?
เมื่อใช้ DMA ขั้นตอนจะแตกต่างกัน
- ขั้นแรกให้ CPU โปรแกรมโปรแกรมควบคุม DMA โดยการตั้งค่าการลงทะเบียนเพื่อที่จะรู้ว่าจะถ่ายโอนที่ไหน (ขั้นตอนที่ 1 ในรูปที่ 5-4)
นอกจากนี้ยังออกคำสั่งไปยังตัวควบคุมดิสก์ที่บอกให้อ่านข้อมูลจากดิสก์ลงในบัฟเฟอร์ภายในและตรวจสอบการตรวจสอบ - เมื่อข้อมูลที่ถูกต้องอยู่ในบัฟเฟอร์ของตัวควบคุมดิสก์ DMA สามารถเริ่มต้นได้ คอนโทรลเลอร์ DMA เริ่มต้นการถ่ายโอนโดยการออกคำร้องขอการอ่านผ่านบัสไปยังดิสก์คอนโทรลเลอร์ (ขั้นตอนที่ 2) คำขอการอ่านนี้ดูเหมือนว่าคำขอการอ่านอื่น ๆ และคอนโทรลเลอร์ดิสก์ไม่ทราบ (หรือสนใจ) ไม่ว่าจะมาจาก CPU หรือจากคอนโทรลเลอร์ DMA โดยทั่วไปที่อยู่หน่วยความจำที่จะเขียนอยู่บนบรรทัดที่อยู่ของบัสดังนั้นเมื่อตัวควบคุมดิสก์เรียกคำถัดไปจากบัฟเฟอร์ภายในมันจะรู้ตำแหน่งที่จะเขียน การเขียนไปยังหน่วยความจำเป็นวงจรบัสมาตรฐานอื่น (ขั้นตอนที่ 3)
- เมื่อการเขียนเสร็จสมบูรณ์ดิสก์คอนโทรลเลอร์จะส่งสัญญาณตอบรับไปยังคอนโทรลเลอร์ DMA รวมถึงบัส (ขั้นตอนที่ 4) จากนั้นคอนโทรลเลอร์ DMA จะเพิ่มที่อยู่หน่วยความจำที่จะใช้และลดจำนวนไบต์ หากจำนวนไบต์ยังคงมีค่ามากกว่า 0 จะทำซ้ำขั้นตอนที่ 2 ถึง 4 จนกระทั่งจำนวนถึง 0
- ในเวลานั้นคอนโทรลเลอร์ DMA จะขัดจังหวะซีพียูเพื่อแจ้งให้ทราบว่าการถ่ายโอนเสร็จสมบูรณ์แล้ว เมื่อระบบปฏิบัติการเริ่มต้นขึ้นก็ไม่จำเป็นต้องคัดลอกบล็อกดิสก์ไปยังหน่วยความจำ มันมีอยู่แล้ว
ถาม: ในขั้นตอนที่สองคอนโทรลเลอร์ DMA จะร้องขอตัวควบคุมดิสก์เพื่อถ่ายโอนข้อมูลจากบัฟเฟอร์ของตัวควบคุมดิสก์ไปยังหน่วยความจำหลัก ในขั้นตอนแรก CPU จะออกคำสั่งไปยังตัวควบคุมดิสก์เพื่อบอกให้อ่านข้อมูลจากดิสก์ไปยังบัฟเฟอร์ภายใน ในขณะเดียวกันซีพียูสามารถบอกตัวควบคุมดิสก์เพื่อถ่ายโอนข้อมูลจากบัฟเฟอร์ของตัวควบคุมดิสก์ไปยังหน่วยความจำหลักเมื่อตัวควบคุมดิสก์เสร็จสิ้นการถ่ายโอนข้อมูลจากดิสก์ไปยังบัฟเฟอร์ของตัวควบคุมดิสก์เพื่อให้ไม่จำเป็นต้อง คอนโทรลเลอร์ DMA บอกตัวควบคุมดิสก์เพื่อถ่ายโอนข้อมูลจากบัฟเฟอร์ของคอนโทรลเลอร์ดิสก์ไปยังหน่วยความจำหลักหรือไม่? (ฉันไม่เข้าใจว่าทำไมเราต้องใช้ตัวควบคุม DMA สำหรับการถ่ายโอนข้อมูลระหว่างดิสก์และหน่วยความจำหลักดังนั้นให้เดาว่าฉันพลาดสิ่งสำคัญที่จะเข้าใจคำพูด)
- ขั้นแรกให้ CPU โปรแกรมโปรแกรมควบคุม DMA โดยการตั้งค่าการลงทะเบียนเพื่อที่จะรู้ว่าจะถ่ายโอนที่ไหน (ขั้นตอนที่ 1 ในรูปที่ 5-4)
ตัวควบคุมอุปกรณ์ของอุปกรณ์ควบคุมอุปกรณ์และดำเนินการกับอุปกรณ์ คอนโทรลเลอร์ DMA ควบคุมอุปกรณ์ใดและดำเนินการใดบ้าง
ขอบคุณ!