เมื่อมีการอ่านดิสก์หรือการเขียนดิสก์ข้อมูลจะไปไหน


10

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

ไม่มีใครรู้ว่าสิ่งที่เรียกว่าบัฟเฟอร์? และ DMA เหมาะสมกับเรื่องนี้อย่างไร

คำตอบ:


20

สำหรับดิสก์อ่านการไหลของข้อมูลเป็นหลัก:

  • หลังจากชุดอ่าน / เขียนอยู่ที่กระบอกสูบที่ร้องขอหัว r / w ที่ร้องขอจะถูกเลือก
  • ที่แต่ละภาคส่วน ID ภาคจะถูกอ่าน หากหมายเลขเซกเตอร์ที่อ่านตรงกับหมายเลขเซกเตอร์ที่ร้องขอข้อมูลเซกเตอร์จะถูกอ่าน
  • ข้อมูลเซกเตอร์ถูกอ่านเป็นสตรีมบิตแบบอนุกรมและแปลงเป็นไบต์
  • ไบต์ของเซกเตอร์จะถูกเก็บไว้ในเซกเตอร์บัฟเฟอร์ (มัก SRAM ในตัวควบคุม); นี้บัฟเฟอร์ภาคที่แตกต่างจาก "แคชดิสก์"
  • เมื่ออ่านภาคทั้งหมดแล้วข้อมูลจะถูกตรวจสอบโดยใช้ ECC และอาจแก้ไขได้
  • เมื่อตรวจสอบแล้วข้อมูลเซกเตอร์จะถูกถ่ายโอนจากคอนโทรลเลอร์ไปยังโฮสต์พีซี หมายเหตุ: การมีอยู่ของบัฟเฟอร์เซกเตอร์นี้ไม่เป็นที่รู้จักกันดีและมีข้อมูลที่ผิดอย่างกว้างขวางว่าความเร็วในการถ่ายโอนข้อมูลบนโฮสต์ (egATA) อินเตอร์เฟสถูกเชื่อมโยงหรือถูก จำกัด โดยอัตราบิตที่หัว R / W นั่นเป็นเท็จอย่างสมบูรณ์เนื่องจากการถ่ายโอนข้อมูลทั้งสองนี้เป็นอิสระและการดำเนินการตามลำดับและไม่พร้อมกัน
  • ในขณะที่พีซีได้รับข้อมูลจากตัวควบคุมดิสก์ผ่านอินเตอร์เฟส ATA พีซีสามารถใช้I / O ที่ตั้งโปรแกรมไว้ (CPU จะอ่านการลงทะเบียนข้อมูลของพอร์ต ATA ซ้ำ ๆ และคัดลอกค่าไปยังหน่วยความจำปลายทาง) หรือDMA (คอนโทรลเลอร์ DMA คือ ตั้งค่าเพื่อคัดลอก N ไบต์จากการลงทะเบียนข้อมูลของพอร์ต ATA ไปยังบัฟเฟอร์หน่วยความจำโดยไม่มีการแทรกแซงของ CPU เพิ่มเติม)
  • หน่วยความจำของพีซี "บัฟเฟอร์" ที่รับข้อมูลอาจเป็นบัฟเฟอร์ของแอปพลิเคชัน (เมื่อใช้การเรียกใช้ระบบblock I / O ) หรืออาจเป็นบัฟเฟอร์ระบบภายในภายใต้การควบคุมระบบไฟล์หรือแม้แต่โปรแกรมหรือหน่วยความจำข้อมูลถ้าข้อมูลมาจาก swap พื้นที่ (หรือไฟล์หน้า)

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

สำหรับเครดิตพิเศษ:

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


1
อาจจะมีความเฉพาะเจาะจงน้อยลงเล็กน้อยเกี่ยวกับ 'r / w heads' เนื่องจากมีการใช้ไดรฟ์ที่ไม่ใช้กลไกบ่อยครั้งกว่านี้ แต่เป็นคำตอบที่ดี
Shinrai

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

+1 สำหรับคำตอบที่ยอดเยี่ยมนี้มีการบันทึกและเขียนอย่างดี เป็นมืออาชีพมาก
climenole

2

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

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

หากคุณสงสัยเกี่ยวกับระดับที่ต่ำกว่าคนขับจะทำการโทรด้วยioctl


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

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