Khi một đĩa đọc hoặc ghi đĩa xảy ra, dữ liệu đi đâu?


10

Tôi hiểu rằng có một thứ như bộ điều khiển đĩa chứa bộ đệm, nhưng tự hỏi liệu CPU có đọc trực tiếp từ bộ đệm này không, hoặc trước tiên dữ liệu phải đi đến một vị trí cụ thể trong bộ nhớ, sau đó cho phép tự đọc bằng CPU?

Có ai biết bộ đệm được gọi là gì không? Và làm thế nào để DMA phù hợp với tất cả điều này?

Câu trả lời:


20

Đối với một đĩa đọc luồng dữ liệu về cơ bản là:

  • sau khi lắp ráp đọc / ghi ở xylanh được yêu cầu, đầu r / w được yêu cầu được chọn.
  • tại mỗi khu vực, ID khu vực được đọc. Nếu số khu vực được đọc phù hợp với số khu vực được yêu cầu, thì dữ liệu ngành được đọc.
  • dữ liệu ngành được đọc dưới dạng luồng bit nối tiếp và được chuyển đổi thành byte.
  • các byte của sector được lưu trữ trong bộ đệm sector (thường là SRAM trong bộ điều khiển); này đệm ngành là khác biệt so với "bộ nhớ cache đĩa".
  • một khi toàn bộ khu vực đã được đọc, dữ liệu được xác nhận bằng ECC và có lẽ đã được sửa.
  • Sau khi xác thực, dữ liệu ngành được truyền từ bộ điều khiển đến PC chủ. Lưu ý: sự tồn tại của bộ đệm khu vực này không được biết rõ và có thông tin sai lệch phổ biến rằng tốc độ truyền trên giao diện máy chủ (egATA) bị ràng buộc hoặc giới hạn bởi tốc độ bit ở đầu R / W. Điều đó là hoàn toàn sai, vì hai lần chuyển dữ liệu này là các hoạt động độc lập và tuần tự và không đồng thời.
  • khi PC nhận dữ liệu từ bộ điều khiển đĩa thông qua giao diện ATA, PC có thể sử dụng I / O được lập trình (CPU liên tục đọc thanh ghi dữ liệu của cổng ATA và sao chép giá trị vào bộ nhớ đích) hoặc DMA (bộ điều khiển DMA là thiết lập để sao chép N byte từ thanh ghi dữ liệu của cổng ATA sang bộ đệm bộ nhớ với sự can thiệp của CPU hơn nữa).
  • "Bộ đệm" bộ nhớ của PC nhận dữ liệu có thể là bộ đệm của ứng dụng (khi sử dụng lệnh gọi hệ thống I / O khối ) hoặc có thể là bộ đệm hệ thống nội bộ trong điều khiển hệ thống tệp, hoặc thậm chí bộ nhớ dữ liệu hoặc chương trình nếu dữ liệu đến từ trao đổi khu vực (hoặc tập tin trang).

Ghi vào đĩa cũng tương tự, ngoại trừ dữ liệu được truyền từ PC sang bộ điều khiển đĩa, ECC được tính toán, khu vực được yêu cầu được đặt và sau đó dữ liệu được ghi từ bộ đệm của bộ phận vào đĩa.

Đối với tín dụng bổ sung:

Đọc các chuyển khoản " phân tán ", sử dụng chuỗi DMA và danh sách thu thập phân tán các địa chỉ bộ nhớ và độ dài bộ đệm. Thay vì một bộ nhớ đệm lớn, liền kề, chuyển "thu thập phân tán" cho phép sử dụng bộ đệm bộ nhớ không liền kề để được tổng hợp cho yêu cầu I / O của đĩa.


1
Có lẽ có thể ít cụ thể hơn một chút về 'r / w head' vì các ổ đĩa không cơ học đang được sử dụng thường xuyên hơn nhiều trong những ngày này, nhưng đó là một câu trả lời tốt.
Shinrai

@Shinrai - Tôi chỉ có kinh nghiệm lập trình trực tiếp với các ổ đĩa di chuyển (và tôi đã sử dụng các ổ đĩa cố định). Tôi chọn không suy đoán hoặc lặp lại thông tin thứ 2 hoặc thứ 3 về cách thức hoạt động của SSD.
mùn cưa

+1 cho câu trả lời tuyệt vời này, được ghi chép lại và viết. Rất chuyên nghiệp.
climenole

2

Nó đi vào một vùng nhớ cụ thể mà kernel đã cấp phát trình điều khiển của đĩa. Tôi không nghĩ nó được đặt tên cụ thể. Vùng nhớ này thường được cấu hình là bộ đệm vòng . Tùy thuộc vào HĐH, bộ nhớ này có thể được sao chép lần thứ hai vào không gian người dùng để ứng dụng sử dụng.

DMA là "truy cập bộ nhớ trực tiếp" có nghĩa là bộ điều khiển ổ đĩa có thể trực tiếp viết thư cho RAM mà không cần phải CPU liên tục hỏi nó nếu nhiều dữ liệu hơn có sẵn (được gọi là bỏ phiếu - cách thức điều sử dụng được thực hiện). Thay vào đó, khi toàn bộ bộ đệm đã được chuyển, bộ điều khiển sẽ ngắt CPU để cho nó biết dữ liệu hiện có sẵn.

Nếu bạn tò mò về một mức độ thậm chí thấp hơn, trình điều khiển thực hiện cuộc gọi ioctl .


1
Bộ đệm vòng thường được sử dụng bởi các thiết bị mạng (ví dụ: bộ điều khiển Ethernet) vì dữ liệu có thể không được yêu cầu (không mong đợi yêu cầu đọc đang chờ xử lý). Dữ liệu từ ổ đĩa / bộ điều khiển luôn đáp ứng yêu cầu của máy chủ lưu trữ. Dữ liệu được chào mời, do đó không cần "bộ đệm vòng" trong trình điều khiển đĩa.
mùn cưa

OK Tôi chỉ làm việc với các bộ xử lý tín hiệu ở cấp độ trình điều khiển và họ cũng sử dụng bộ đệm vòng, vì vậy tôi đã giả sử.
Aaron D. Marasco
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.