CPU หยุดทำงานอย่างสมบูรณ์เมื่อใช้ DMA หรือไม่


19

ฉันมีคำถามที่ตรงไปตรงมา แต่ฉันไม่สามารถหาคำตอบได้ทุกที่

บนระบบ Von-Neumann ที่รหัสและข้อมูลอยู่ใน RAM เดียวกัน CPU ต้องดึงคำแนะนำทั้งหมดจากหน่วยความจำ ตอนนี้เพื่อย้ายข้อมูลจำนวนมากระหว่างส่วนประกอบคอมพิวเตอร์มีตัวควบคุมการเข้าถึงหน่วยความจำโดยตรงที่ช่วยให้อุปกรณ์ต่อพ่วงสามารถเข้าถึง RAM ของระบบหลัก

คำถามของฉันคือ: ถ้า DMA อนุญาตให้มีการถ่ายโอนข้อมูล (อาจยาวมาก) ระหว่างฮาร์ดดิสก์และแรมนั่นไม่ได้หมายความว่า CPU ไม่สามารถใช้ RAM ได้ดังนั้นจึงไม่สามารถเรียกคำสั่งต่อไปได้

กล่าวโดยย่อ DMA นั้นหมายถึงการแทนที่โปรเซสเซอร์ที่ทำให้ I / O อ่านและเขียนทั้งหมดเพื่อให้หน่วยประมวลผลว่างสามารถทำสิ่งอื่น ๆ ได้ อย่างไรก็ตามหากไม่สามารถดึงข้อมูลคำแนะนำจาก RAM ได้แสดงว่ายังไม่ได้รับการปลดปล่อย

มีรายละเอียดบางอย่างที่ฉันหายไปที่นี่ไหม?

ขอบคุณ


7
ใช่. DMA ไม่ค่อยทำงานที่แบนด์วิดธ์เต็มของหน่วยความจำ มันแค่ขโมยรอบ (หรือการระเบิดของรอบ) ทุก ๆ ตอนแล้วควบคุมโดยอัตราของอุปกรณ์ I / O
Dave Tweed

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

2
@pipe: นั่นไม่ถูกต้อง Amiga ใช้ CPU M68K ซึ่งมีบัสแบบอะซิงโครนัสอย่างสมบูรณ์ คุณอาจนึกถึง Apple II ซึ่งใช้ประโยชน์จากข้อเท็จจริงที่ว่า 6502 CPU ใช้บัสเพียงครึ่งเดียวของรอบนาฬิกาแต่ละครั้งและใช้อีกครึ่งหนึ่งสำหรับเอาต์พุตวิดีโอซึ่งยังทำหน้าที่รักษา DRAM ให้รีเฟรช
Dave Tweed

4
CPU ที่ทันสมัยมีแคชที่แก้ไขโดยเฉลี่ยเข้าถึงหน่วยความจำ 95% ตราบใดที่ CPU ไม่ต้องการ RAM DMA ก็ไม่รบกวน
MSalters

2
@DaveTweed Nope หากคุณดูการกำหนดเวลาบัสสำหรับ 68000 แต่ละรอบ "บัสรอบ" (อ่านหรือเขียน) จะแบ่งออกเป็น 8 สถานะโดยใช้เวลาอย่างน้อย 4 รอบนาฬิกาจริงซึ่งมีเพียงบางคนเท่านั้นที่ขับดาต้าบัส การมัลติเพล็กซ์นี้ต้องใช้ฮาร์ดแวร์เพิ่มเติมบางอย่างเพราะมันช่วยขับบัสแอดเดรสตลอดเวลา
ไปป์

คำตอบ:


18

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

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

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

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


4
เป็นวิธีการเพิ่มเติมระบบบางระบบอาจมีหลายช่องทางในการเข้าถึงหน่วยความจำ ซีพียูอาจได้รับอนุญาตให้ใช้หนึ่งช่องสัญญาณในขณะที่ DMA เอ็นจิ้นทำงานที่อื่น
Cort Ammon - Reinstate Monica

1
@CortAmmon ฉันเชื่อว่าหน่วยความจำสองแชนเนลมักจะกระจายไปทั่วพื้นที่ที่อยู่ทางกายภาพดังนั้นตัวอย่างเช่นถ้าคุณมี RAM 2GB แล้ว 1GB ที่ต่ำกว่าจะอยู่ที่ 1 แชนเนลแรกและ 1GB บนอยู่บนแชนเนลที่สอง ในกรณีนั้นหากทั้ง CPU และ DMA ต้องการเข้าถึงพื้นที่หน่วยความจำ 1GB เดียวกันพวกเขาจะอยู่ในช่องทางเดียวกันและอาจเกิดความขัดแย้ง
Micheal Johnson

ฉันไม่แน่ใจว่าระบบจริง ๆ จำนวนมากเคยใช้สถาปัตยกรรม VNM จริงหรือไม่ คอขวดแคบเกินไป มันเป็นอุปกรณ์ทางทฤษฎีที่ใช้ใน CS ที่ใกล้ที่สุดฉันคิดได้ว่าเป็นอุปกรณ์ Texas 16 บิตในปี 1970 ที่มีการลงทะเบียนใน RAM ฉันกำลังคิดถึงการ์ดกราฟิกที่ใช้ RAM แบบพอร์ตคู่ Chips เช่น ARM จะใช้ high-end ในการทำ busses ภายใน (AHP, APB, Stacks) futureelectronics.com/en/memory/dual-ports.aspx idt.com/products/memory-logic/multi-port-memory/
ChrisR

1
ฉันไม่คิดว่าคำถามนี้ถามเกี่ยวกับ CPU Von-Neumann ที่เข้มงวด แต่ค่อนข้างจะใช้งานได้จริงเช่น x86 หรือ ARM ซึ่งเป็น Von-Neumann อย่างหลวม ๆ ในกรณีของ Von-Neumann ที่เข้มงวดโดยไม่มีการลงทะเบียนภายในความสามารถของ CPU ที่จะทำงานต่อไปในระหว่าง DMA ลงมาถึงจุดที่สองในคำตอบของฉัน DMA ไม่ได้ใช้แบนด์วิดท์หน่วยความจำทั้งหมด
Micheal Johnson

20

หากมีอินเตอร์เฟสหน่วยความจำเดียวจะมีฮาร์ดแวร์ที่จะทำการอนุญาโตตุลาการระหว่างการร้องขอ โดยทั่วไปแล้วโปรเซสเซอร์จะได้รับความสำคัญเหนือ I / O โดยไม่ต้องอดอาหาร I / O แต่ถึงแม้ว่า I / O จะมีลำดับความสำคัญอยู่เสมอโปรเซสเซอร์จะมีโอกาสในการเข้าถึงหน่วยความจำเนื่องจาก I / O มีแนวโน้มที่จะมีความต้องการแบนด์วิดท์ต่ำ

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

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

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

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


2

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

แนวคิดเบื้องหลังนี้มีดังต่อไปนี้:

หากคุณต้องการคัดลอกข้อมูลต่อเนื่องจากหน่วยความจำ CPU จะต้องทำสิ่งต่อไปนี้:

คำนวณที่อยู่ -> อ่านข้อมูล -> คำนวณที่อยู่ใหม่ (+ 1 คำ) -> อ่านข้อมูล ...

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


"เนื่องจากมีเพียงระบบบัสเดียว" ... ไม่ใช่ข้อสันนิษฐานที่ปลอดภัยที่จะทำกับคอมพิวเตอร์สมัยใหม่ที่มีหน่วยความจำและบัสต่อพ่วงทำงานด้วยความเร็วที่แตกต่างกันและมีการแปลโปรโตคอลเกิดขึ้นระหว่างพวกเขา
rackandboneman

3
สำหรับคอมพิวเตอร์รุ่นเก่า: มีการควบคุมดูแลการออกแบบใน Apple II (หรือผู้บุกเบิก / ต้นแบบของมันหรือไม่?) โดยที่พวกเขาหยุด CPU อย่างแท้จริง การลงทะเบียนใน 6502 นั้นถูกนำมาใช้เป็นหน่วยความจำแบบไดนามิก วิธีที่พวกเขาหยุด CPU หยุดการรีเฟรช ความยาวสูงสุด DMA สิ้นสุดลงมากขึ้นอยู่กับเครื่องมาก
rackandboneman

เนื่องจากคำถามเกี่ยวกับสถาปัตยกรรม von neumann และ DMA นี่ฟังดูเหมือนคำถามเกี่ยวกับไมโครคอนโทรลเลอร์ (จากนั้นฮาร์ดดิสจะถูกกล่าวถึงในตัวอย่างอีกครั้ง) เช่นเดียวกับ Paul A. Clayton ชี้ให้เห็นว่ามันซับซ้อนมากขึ้นเมื่อคุณพิจารณาแคชหลายระดับ หนึ่งอาจคิดเกี่ยวกับ cpu ที่มีหลาย opcodes อยู่ในคำและดำเนินการหลังจากที่อื่นหรือ cpus กับแคชของตัวเองซึ่งจะมีรหัส cpu สามารถดำเนินการ แต่เอาท์พุทจะต้องบัฟเฟอร์ ... ดังนั้นใช่คุณ มีความเป็นไปได้ไม่รู้จบ
NeinDochOah

2

โดยทั่วไปแล้วไม่มี

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


0

โดยทั่วไปไม่มี

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

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

ไม่มีคำตอบทั่วไปสำหรับวิธีการทำงานของ dma มันขึ้นอยู่กับการออกแบบระบบและส่วนประกอบทั้งหมดภายในระบบ

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