คอนโทรลเลอร์ DMA ทำงานอย่างไร


14

จากหัวข้อ 5.1.4 การเข้าถึงหน่วยความจำโดยตรงในระบบปฏิบัติการสมัยใหม่โดย Andrew S. Tanenbaum, Herbert Bos, 2014 ,

เพื่อให้คำอธิบายง่ายขึ้นเราสันนิษฐานว่า CPU เข้าถึงอุปกรณ์และหน่วยความจำทั้งหมดผ่านบัสระบบเดียวที่เชื่อมต่อ CPU หน่วยความจำและอุปกรณ์ I / O ดังแสดงในรูปที่ 5-4

ป้อนคำอธิบายรูปภาพที่นี่

  1. เพื่ออธิบายวิธีการทำงานของ DMA ให้เราพิจารณาก่อนว่าการอ่านดิสก์เกิดขึ้นอย่างไรเมื่อไม่ได้ใช้ DMA

    • ก่อนอื่นตัวควบคุมดิสก์จะอ่านบล็อก (หนึ่งส่วนขึ้นไป) จากไดรฟ์แบบอนุกรมทีละบิตจนกระทั่งบล็อกทั้งหมดอยู่ในบัฟเฟอร์ภายในของคอนโทรลเลอร์
    • จากนั้นคำนวณการตรวจสอบเพื่อตรวจสอบว่าไม่มีข้อผิดพลาดในการอ่านเกิดขึ้น จากนั้นคอนโทรลเลอร์จะทำให้เกิดการขัดจังหวะ เมื่อระบบปฏิบัติการเริ่มทำงานมันสามารถอ่านบล็อกดิสก์จากบัฟเฟอร์ของคอนโทรลเลอร์เป็นไบต์หรือคำในแต่ละครั้งโดยเรียกใช้ลูปโดยการวนซ้ำแต่ละครั้งจะอ่านหนึ่งไบต์หรือหนึ่งคำจากอุปกรณ์ควบคุมรีจิสเตอร์และเก็บไว้ในหน่วยความจำหลัก

    ถาม: ในขั้นตอนที่สอง

    • ไม่ถ่ายโอนข้อมูล " จากบัฟเฟอร์ของคอนโทรลเลอร์ " ไปยังหน่วยความจำหลัก? ทำไมถึงพูดว่า " จากบัฟเฟอร์ของคอนโทรลเลอร์ " และ " จากอุปกรณ์ควบคุมรีจิสเตอร์ "?

    • ในขั้นตอนที่สองคอนโทรลเลอร์สามารถถ่ายโอนข้อมูลจากบัฟเฟอร์ไปยังหน่วยความจำหลักโดยไม่รบกวนการทำงานของ cpu และไม่เกี่ยวข้องกับระบบปฏิบัติการอีกครั้ง?

  2. เมื่อใช้ DMA ขั้นตอนจะแตกต่างกัน

    • ขั้นแรกให้ CPU โปรแกรมโปรแกรมควบคุม DMA โดยการตั้งค่าการลงทะเบียนเพื่อที่จะรู้ว่าจะถ่ายโอนที่ไหน (ขั้นตอนที่ 1 ในรูปที่ 5-4)
      นอกจากนี้ยังออกคำสั่งไปยังตัวควบคุมดิสก์ที่บอกให้อ่านข้อมูลจากดิสก์ลงในบัฟเฟอร์ภายในและตรวจสอบการตรวจสอบ
    • เมื่อข้อมูลที่ถูกต้องอยู่ในบัฟเฟอร์ของตัวควบคุมดิสก์ DMA สามารถเริ่มต้นได้ คอนโทรลเลอร์ DMA เริ่มต้นการถ่ายโอนโดยการออกคำร้องขอการอ่านผ่านบัสไปยังดิสก์คอนโทรลเลอร์ (ขั้นตอนที่ 2) คำขอการอ่านนี้ดูเหมือนว่าคำขอการอ่านอื่น ๆ และคอนโทรลเลอร์ดิสก์ไม่ทราบ (หรือสนใจ) ไม่ว่าจะมาจาก CPU หรือจากคอนโทรลเลอร์ DMA โดยทั่วไปที่อยู่หน่วยความจำที่จะเขียนอยู่บนบรรทัดที่อยู่ของบัสดังนั้นเมื่อตัวควบคุมดิสก์เรียกคำถัดไปจากบัฟเฟอร์ภายในมันจะรู้ตำแหน่งที่จะเขียน การเขียนไปยังหน่วยความจำเป็นวงจรบัสมาตรฐานอื่น (ขั้นตอนที่ 3)
    • เมื่อการเขียนเสร็จสมบูรณ์ดิสก์คอนโทรลเลอร์จะส่งสัญญาณตอบรับไปยังคอนโทรลเลอร์ DMA รวมถึงบัส (ขั้นตอนที่ 4) จากนั้นคอนโทรลเลอร์ DMA จะเพิ่มที่อยู่หน่วยความจำที่จะใช้และลดจำนวนไบต์ หากจำนวนไบต์ยังคงมีค่ามากกว่า 0 จะทำซ้ำขั้นตอนที่ 2 ถึง 4 จนกระทั่งจำนวนถึง 0
    • ในเวลานั้นคอนโทรลเลอร์ DMA จะขัดจังหวะซีพียูเพื่อแจ้งให้ทราบว่าการถ่ายโอนเสร็จสมบูรณ์แล้ว เมื่อระบบปฏิบัติการเริ่มต้นขึ้นก็ไม่จำเป็นต้องคัดลอกบล็อกดิสก์ไปยังหน่วยความจำ มันมีอยู่แล้ว

    ถาม: ในขั้นตอนที่สองคอนโทรลเลอร์ DMA จะร้องขอตัวควบคุมดิสก์เพื่อถ่ายโอนข้อมูลจากบัฟเฟอร์ของตัวควบคุมดิสก์ไปยังหน่วยความจำหลัก ในขั้นตอนแรก CPU จะออกคำสั่งไปยังตัวควบคุมดิสก์เพื่อบอกให้อ่านข้อมูลจากดิสก์ไปยังบัฟเฟอร์ภายใน ในขณะเดียวกันซีพียูสามารถบอกตัวควบคุมดิสก์เพื่อถ่ายโอนข้อมูลจากบัฟเฟอร์ของตัวควบคุมดิสก์ไปยังหน่วยความจำหลักเมื่อตัวควบคุมดิสก์เสร็จสิ้นการถ่ายโอนข้อมูลจากดิสก์ไปยังบัฟเฟอร์ของตัวควบคุมดิสก์เพื่อให้ไม่จำเป็นต้อง คอนโทรลเลอร์ DMA บอกตัวควบคุมดิสก์เพื่อถ่ายโอนข้อมูลจากบัฟเฟอร์ของคอนโทรลเลอร์ดิสก์ไปยังหน่วยความจำหลักหรือไม่? (ฉันไม่เข้าใจว่าทำไมเราต้องใช้ตัวควบคุม DMA สำหรับการถ่ายโอนข้อมูลระหว่างดิสก์และหน่วยความจำหลักดังนั้นให้เดาว่าฉันพลาดสิ่งสำคัญที่จะเข้าใจคำพูด)

  3. ตัวควบคุมอุปกรณ์ของอุปกรณ์ควบคุมอุปกรณ์และดำเนินการกับอุปกรณ์ คอนโทรลเลอร์ DMA ควบคุมอุปกรณ์ใดและดำเนินการใดบ้าง

ขอบคุณ!


ดูเหมือนว่าความเข้าใจของคุณจะขึ้นอยู่กับ Bus Mastering ซึ่งฉันคิดว่าทันสมัยกว่าแนวคิด DMA ที่อธิบายไว้ในตำราเรียนนั้น แนวคิดของ DMA ในหนังสือเรียนนั้นเป็นสิ่งดั้งเดิม

ฉันเพิ่มไดอะแกรมสำหรับโมเดลที่เรียบง่ายซึ่งหนังสือใช้
ทิม

ลูกศร 3 ในแผนภาพดูเหมือนจะไม่ตรงกับคำอธิบายข้อความ ... ขอแสดงความยินดี ในการพิจารณาว่าอันใดถูกต้องจำเป็นต้องใช้แผนภาพเวลารถบัสสำหรับขั้นตอนที่ 3 ที่สำคัญกว่านั้นเราต้องค้นหาว่าอุปกรณ์ใดรับผิดชอบต่อการเก็บสัญญาณข้อมูลในขั้นตอนที่ 3 คอนโทรลเลอร์ดิสก์ส่งข้อมูลไปยังคอนโทรลเลอร์ DMA ก่อนหรือไม่จากนั้นคอนโทรลเลอร์ DMA จะทำซ้ำข้อมูล (ใส่แรงดันไฟฟ้าของตัวเองลงบนบัส ) กับหน่วยความจำ?

"Ack" ในขั้นตอนที่ 4 นั้นน่าสงสัยเช่นกัน DMA ไม่ทราบจำนวนไบต์ที่จะคัดลอกไปแล้วหรือไม่

ไม่แน่ใจว่าจะชี้แจงอย่างไร คุณศึกษาหนังสือเกี่ยวกับระบบปฏิบัติการและสถาปัตยกรรมหรือคิดว่าดีที่สุด?
ทิม

คำตอบ:


7

ไตรมาสที่ 1

ในขั้นตอนแรกเราไม่ได้ใช้ DMA ดังนั้นเนื้อหาของตัวควบคุมดิสก์จะถูกอ่านโดยโปรเซสเซอร์ หน่วยประมวลผลจะแน่นอน (สมมติว่าข้อมูลกำลังจะถูกนำไปใช้กับบางสิ่งและไม่ใช่แค่ถูกโยนทิ้งไป) เก็บไว้ในหน่วยความจำของระบบ

บัฟเฟอร์ในกรณีนี้คือชิ้นส่วนของหน่วยความจำบนฮาร์ดดิสก์ (คอนโทรลเลอร์) และอุปกรณ์ควบคุมจะลงทะเบียนการควบคุมการลงทะเบียนของฮาร์ดดิสก์ (คอนโทรลเลอร์) เอง

ไม่เกี่ยวข้องกับระบบปฏิบัติการ (หรือซอฟต์แวร์อื่น ๆ ) จะต้องใช้การดำเนินการ DMA บางประเภทและส่วนของข้อความที่คุณกำลังพูดถึงในส่วนนี้ของคำถามของคุณไม่ได้ใช้ DMA ในกรณีนี้มันจะไม่เกิดขึ้น

ไตรมาสที่ 2

ดังนั้นจุดทั้งหมดของคอนโทรลเลอร์ DMA คือ "ทำงานที่น่าเบื่อในการจัดเก็บข้อมูลจากบัฟเฟอร์ภายในของอุปกรณ์ลงในหน่วยความจำหลัก" CPU จะทำงานกับทั้งคอนโทรลเลอร์ DMA และอุปกรณ์ดิสก์ หากดิสก์สามารถทำสิ่งนี้ได้เองไม่จำเป็นต้องมีคอนโทรลเลอร์ DMA

ในความเป็นจริงแล้วในระบบที่ทันสมัยความสามารถของ DMA นั้นถูกสร้างขึ้นในตัวควบคุมฮาร์ดดิสก์ในแง่ที่ว่าตัวควบคุมนั้นมีความสามารถ "บัสมาสเตอร์" ซึ่งหมายความว่าตัวควบคุมนั้นเป็นคอนโทรลเลอร์ DMA สำหรับอุปกรณ์ อย่างไรก็ตามการมองพวกเขาด้วยอุปกรณ์แยกสองชิ้นทำให้แนวคิดทั้งหมดของ DMA นั้นยากที่จะเข้าใจน้อยลง

Q3 (ชนิด)

หากคุณคิดว่าฮาร์ดดิสก์เป็นกองอิฐที่เพิ่งส่งไปยังไซต์อาคารและหน่วยประมวลผลเป็นช่างก่ออิฐที่วางอิฐเพื่อสร้างบ้าน ตัวควบคุม DMA เป็นกรรมกรที่นำก้อนอิฐจากกองอิฐไปยังที่ที่พวกเขาต้องการสำหรับช่างก่ออิฐซึ่งหมายความว่าช่างก่ออิฐสามารถมีสมาธิในการทำงานจริงของการวางอิฐ (ซึ่งเป็นงานที่มีทักษะหากคุณเคยลองมาแล้ว ตัวคุณเอง) และการทำงานอย่างง่าย ๆ ของ "การดึงและขนย้าย" สามารถทำได้โดยผู้ที่มีทักษะน้อย

หลักฐานโดยสังเขป: เมื่อฉันเรียนรู้เกี่ยวกับการถ่ายโอน DMA ครั้งแรกจากดิสก์ไปยังหน่วยความจำคือประมาณปี 1997 หรือเมื่อตัวควบคุม IDE เริ่มใช้ DMA และคุณจำเป็นต้องได้รับไดรเวอร์ "มาเธอร์บอร์ด IDE คอนโทรลเลอร์" เพื่อให้ IDE ทำ DMA และในเวลานั้น การอ่านจากฮาร์ดดิสก์จะใช้เวลาประมาณ 6-10% ของเวลา CPU โดยที่ DMA ในการตั้งค่าเดียวกันจะใช้เวลาประมาณ 1% ของเวลา CPU ก่อนเวลานั้นระบบแฟนซีที่มีตัวควบคุมดิสก์ SCSI เท่านั้นที่จะใช้ DMA


5

นี่ไม่ใช่คำตอบ มันเป็นคำร้องขอให้ชี้แจงที่ยาวเกินกว่าจะแสดงความคิดเห็นได้

ก่อนที่ทุกคนจะสามารถตอบคำถามนี้ได้เราจะต้องอธิบายสถาปัตยกรรมระบบคอมพิวเตอร์ที่กำลังพูดถึงอย่างชัดเจน กล่าวคือ:

  • ระบบบัสเกี่ยวข้องกับคำอธิบายนี้อย่างไร

    • ระบบคอมพิวเตอร์ส่วนใหญ่มีบัสหน่วยความจำ
    • คอมพิวเตอร์ส่วนใหญ่มีระบบบัสประเภทอื่นเช่นกัน
  • ดิสก์ IO ผ่านหน่วยความจำบัสด้วยหรือไม่

    • กล่าวอีกนัยหนึ่งดิสก์ใช้บรรทัดบัสแอดเดรสสำหรับแอดเดรสและบรรทัดบัสข้อมูลสำหรับข้อมูลหรือไม่
  • ตัวควบคุมดิสก์มองเห็นบัสหน่วยความจำว่า ...

    • หน่วยความจำบัส นั่นคือมันคิดว่ามันกำลังคุยกับชิปหน่วยความจำ เช่น RAS (การเข้าถึงแถว), CAS (การเข้าถึงคอลัมน์แฟลช), ...
    • ไม่น่าเป็นไปได้มาก - การพูดคุยกับชิปหน่วยความจำต้องใช้ความแม่นยำสูงเป็นพิเศษเกี่ยวกับการออกคำสั่งตามเวลา DRAM (เวลาแฝง) - รอบนาฬิกาไม่กี่รอบเร็วเกินไปหรือช้าเกินไปการสูญเสียข้อมูลจะเกิดขึ้น
  • ดังนั้น ... คอนโทรลเลอร์ของดิสก์คิดอย่างไรกับบัสว่า "ที่จริงแล้วคืออะไร"

  • ในระบบคอมพิวเตอร์ส่วนใหญ่มีชนิดของ IO ที่เรียกว่า "พอร์ต I / O"

    • พอร์ต I / O อาจ piggyback บนบัสหน่วยความจำหรืออาจมีบัสเฉพาะอีกอันหนึ่ง
    • คุณสมบัติที่โดดเด่นของพอร์ต I / O คือสามารถทำสิ่งต่าง ๆ ให้เสร็จในรอบเดียว (หรือจำนวนคงที่) ที่กำหนดไว้ล่วงหน้า - ไม่ต้องกังวลเกี่ยวกับอันตรายของการกำหนดเวลา DRAM
  • ในระบบขั้นสูง (ดีตั้งแต่สองทศวรรษที่ผ่านมา) มีระบบบัสรุ่นใหม่กว่า ตัวอย่างเช่น ISA, PCI, AGP, PCMCIA ... SCSI, ATA, SAS, SATA, FC-AL ...


ขณะนี้ด้วยความไม่แน่นอนมากมายที่เกิดขึ้นเกี่ยวกับ "ระบบคอมพิวเตอร์ที่กำลังคุยกัน" คุณสามารถเข้าใจได้ว่าทำไมคุณจะไม่ได้รับคำตอบที่ชัดเจนสำหรับคำถามของคุณ

ใช่ฉันรู้ว่ามันมาจากตำราเรียน คุณมีสำเนา ฉันไม่. (ไม่ใช่ที่บ้าน - มีอยู่ในออฟฟิศ) ดังนั้นหากคุณต้องการคำตอบคุณจะต้องแสดงไดอะแกรมและอธิบายว่าระบบบัสของคอมพิวเตอร์ของคุณเป็นอย่างไร


ที่บรรทัดล่างสุดแม้ว่า:

  • DMA เป็นอุปกรณ์ที่ตั้งโปรแกรมได้ นั่นคือซีพียูมีความรับผิดชอบสูงสุดในการบอก DMA ว่าต้องทำอย่างไร แน่นอนในช่วงเวลาที่ DMA เข้าครอบครองระบบ CPU จะร่วมมือโดยให้ DMA แสดงรายการ

  • ภายใต้การควบคุมของ CPU (และระบบปฏิบัติการที่เรียกใช้) DMA มีความสามารถในการควบคุมบัสตั้งแต่หนึ่งบัสขึ้นไปเพื่ออำนวยความสะดวกในการถ่ายโอนข้อมูลจากคอนโทรลเลอร์ดิสก์ไปยังหน่วยความจำหลัก

  • ในช่วงเวลาที่ DMA เข้าควบคุมบัส (พหูพจน์) DMA จะออกคำสั่งผ่านบัสดังกล่าวนั่นคือแทนที่ตัวควบคุมตามปกตินั่นคือ DMA แสร้งทำเป็นว่ามันกำลังทำงานของ CPU

  • หากการถ่ายโอนข้อมูลเกี่ยวข้องกับบัสที่แตกต่างกันสองแห่ง DMA อาจต้องทำเช่นนี้กับบัสอื่น

  • เพื่อให้สามารถย้ายจำนวนไบต์ (คำและอื่น ๆ ) DMA จะมีตัวนับลูปสำหรับการติดตามจำนวนข้อมูลที่เหลือเพื่อคัดลอก

  • เพื่อให้สามารถเขียนไปยังหน่วยความจำหลัก DMA มีการลงทะเบียนที่อยู่หน่วยความจำซึ่ง CPU ตั้งโปรแกรมไว้เพื่อให้ CPU สามารถบอก DMA ว่าจะเขียนข้อมูลไปยังที่ใด

  • ขึ้นอยู่กับการออกแบบบัสระบบ DMA อาจหรืออาจไม่ต้องจัดการกับรายละเอียดที่น่ากลัวของรอบเวลา DRAM

  • กาลครั้งหนึ่ง, บางครั้งหลังจาก DMA ได้รับการคิดค้นบางอุปกรณ์ต่อพ่วงเริ่มก่อนแพคเกจ DMA บนตัวควบคุมของพวกเขา - นี้เรียกว่าMastering โดยสาร ยังคงไม่ว่า DMA จะอยู่บนแพ็คเกจ CPU, แผงวงจรหลักหรือการ์ด I / O นั้นจะต้องอยู่ภายใต้การควบคุม (การเขียนโปรแกรม) ของ CPU ในที่สุดเพราะพวกเขาจะต้องเจรจาการเข้าถึงบัสระบบ (พหูพจน์) และ หน่วยความจำหลัก

  • ระบบคอมพิวเตอร์ที่ทันสมัยมีระบบย่อยเฉพาะที่เรียกว่า DRAM Controller หากมีอย่างใดอย่างหนึ่งมันเกือบจะมั่นใจว่า DRAM Controller นี้จะเติมเต็มการทำงานของ DMA นั่นคือดูเหมือนว่ามันเป็นโปรแกรม "byte copying loop" และความซับซ้อนดังกล่าวทั้งหมดถูกซ่อนอยู่ภายในซิลิคอนของ DRAM ตัวควบคุม


หากคุณพบว่ามันสับสนมาก - ฉันคิดว่ามันสับสนเช่นกัน - คุณจะต้องมีไดอะแกรม ไดอะแกรมมากมาย ไดอะแกรมของระบบ ไดอะแกรมรถบัส ไดอะแกรมกำหนดเวลา แผนภาพการเปลี่ยนสถานะ เป็นต้น


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.