Bộ điều khiển DMA hoạt động như thế nào?


14

Từ Phần 5.1.4 Truy cập bộ nhớ trực tiếp trong các hệ điều hành hiện đại của Andrew S. Tanenbaum, Herbert Bos, 2014 ,

Để đơn giản hóa lời giải thích, chúng tôi giả định rằng CPU truy cập tất cả các thiết bị và bộ nhớ thông qua một bus hệ thống duy nhất kết nối CPU, bộ nhớ và các thiết bị I / O, như trong Hình 5-4.

nhập mô tả hình ảnh ở đây

  1. Để giải thích cách DMA hoạt động, trước tiên chúng ta hãy xem cách đọc đĩa xảy ra khi DMA không được sử dụng.

    • Đầu tiên, bộ điều khiển đĩa đọc khối (một hoặc nhiều cung) từ ổ đĩa, từng bit một, cho đến khi toàn bộ khối nằm trong bộ đệm bên trong của bộ điều khiển.
    • Tiếp theo, nó tính toán tổng kiểm tra để xác minh rằng không có lỗi đọc đã xảy ra. Sau đó bộ điều khiển gây ra một ngắt. Khi hệ điều hành bắt đầu chạy, nó có thể đọc khối đĩa từ bộ đệm của bộ điều khiển một byte hoặc một từ tại một thời điểm bằng cách thực hiện một vòng lặp, với mỗi lần lặp đọc một byte hoặc từ từ một thanh ghi thiết bị điều khiển và lưu trữ nó trong bộ nhớ chính.

    Q: trong bước thứ hai,

    • không phải dữ liệu được chuyển " từ bộ đệm của bộ điều khiển " sang bộ nhớ chính sao? Tại sao nó nói cả " từ bộ đệm của bộ điều khiển " và " từ thanh ghi thiết bị điều khiển "?

    • trong bước thứ hai, bộ điều khiển có thể chuyển dữ liệu từ bộ đệm của nó sang bộ nhớ chính mà không làm gián đoạn đến cpu và không liên quan đến hệ điều hành nữa không?

  2. Khi DMA được sử dụng, quy trình sẽ khác.

    • Đầu tiên CPU lập trình bộ điều khiển DMA bằng cách đặt các thanh ghi của nó để nó biết phải chuyển gì ở đâu (bước 1 trong Hình 5-4).
      Nó cũng đưa ra một lệnh cho bộ điều khiển đĩa bảo nó đọc dữ liệu từ đĩa vào bộ đệm bên trong của nó và xác minh tổng kiểm tra.
    • Khi dữ liệu hợp lệ nằm trong bộ đệm của bộ điều khiển đĩa, DMA có thể bắt đầu. Bộ điều khiển DMA bắt đầu chuyển bằng cách đưa ra yêu cầu đọc qua bus đến bộ điều khiển đĩa (bước 2). Yêu cầu đọc này trông giống như bất kỳ yêu cầu đọc nào khác và bộ điều khiển đĩa không biết (hoặc quan tâm) liệu nó đến từ CPU hay từ bộ điều khiển DMA. Thông thường, địa chỉ bộ nhớ để ghi là trên các dòng địa chỉ của bus, vì vậy khi bộ điều khiển đĩa lấy từ tiếp theo từ bộ đệm bên trong của nó, nó sẽ biết ghi nó ở đâu. Ghi vào bộ nhớ là một chu kỳ bus tiêu chuẩn khác (bước 3).
    • Khi ghi xong, bộ điều khiển đĩa sẽ gửi tín hiệu xác nhận đến bộ điều khiển DMA, cũng trên bus (bước 4). Bộ điều khiển DMA sau đó tăng địa chỉ bộ nhớ để sử dụng và giảm số byte. Nếu số byte vẫn lớn hơn 0, các bước 2 đến 4 được lặp lại cho đến khi số đếm đạt 0.
    • Vào thời điểm đó, bộ điều khiển DMA làm gián đoạn CPU để cho nó biết rằng quá trình truyền đã hoàn tất. Khi hệ điều hành khởi động, nó không phải sao chép khối đĩa vào bộ nhớ; nó đã ở đó

    Q: trong bước thứ hai, bộ điều khiển DMA yêu cầu bộ điều khiển đĩa chuyển dữ liệu từ bộ đệm của bộ điều khiển đĩa sang bộ nhớ chính. Trong bước đầu tiên, CPU đưa ra lệnh cho bộ điều khiển đĩa yêu cầu nó đọc dữ liệu từ đĩa vào bộ đệm bên trong của nó. Đồng thời, CPU cũng có thể yêu cầu bộ điều khiển đĩa chuyển dữ liệu từ bộ đệm của bộ điều khiển đĩa sang bộ nhớ chính, khi bộ điều khiển đĩa kết thúc việc truyền dữ liệu từ đĩa sang bộ đệm của bộ điều khiển đĩa, do đó không cần Bộ điều khiển DMA để báo cho bộ điều khiển đĩa chuyển dữ liệu từ bộ đệm của bộ điều khiển đĩa sang bộ nhớ chính? (Tôi không thể hiểu tại sao chúng ta cần bộ điều khiển DMA để truyền dữ liệu giữa đĩa và bộ nhớ chính, vì vậy hãy đoán rằng tôi bỏ lỡ điều gì đó quan trọng để hiểu trích dẫn).

  3. Bộ điều khiển thiết bị của thiết bị điều khiển thiết bị và thực hiện các thao tác trên thiết bị. Bộ điều khiển DMA điều khiển và thực hiện các hoạt động trên thiết bị nào?

Cảm ơn!


Có vẻ như sự hiểu biết của bạn dựa trên Bus Mastering, mà tôi đoán là hiện đại hơn khái niệm DMA được mô tả trong sách giáo khoa đó. Khái niệm DMA trong sách giáo khoa còn nguyên thủy hơn.
rwong

Tôi đã thêm một sơ đồ cho một mô hình đơn giản hóa mà cuốn sách sử dụng.
StackExchange cho tất cả

Mũi tên 3 trong sơ đồ dường như không khớp với mô tả văn bản ... xin chúc mừng. Để xác định cái nào là chính xác, cần có sơ đồ thời gian bus cho bước 3. Quan trọng hơn, người ta cần tìm ra thiết bị nào chịu trách nhiệm giữ tín hiệu dữ liệu ở bước 3. Bộ điều khiển đĩa có gửi dữ liệu đến bộ điều khiển DMA trước không, và sau đó bộ điều khiển DMA lặp lại dữ liệu (đặt điện áp của chính nó lên bus ) vào bộ nhớ?
rwong 8/2/2015

"Ack" trong bước 4 cũng đáng ngờ. DMA không biết số byte sẽ được sao chép sao?
rwong 8/2/2015

Không biết làm thế nào để làm rõ. Những cuốn sách về hệ điều hành và kiến ​​trúc bạn đã học hoặc bạn nghĩ là tốt nhất?
StackExchange cho tất cả

Câu trả lời:


7

Q1

Trong bước đầu tiên, chúng tôi KHÔNG sử dụng DMA, do đó, nội dung của bộ điều khiển đĩa được bộ xử lý đọc từng mảnh một. Bộ xử lý tất nhiên sẽ (giả sử dữ liệu thực sự sẽ được sử dụng cho một cái gì đó, và không chỉ bị vứt đi) lưu trữ nó trong bộ nhớ của hệ thống.

Bộ đệm trong trường hợp này là một phần bộ nhớ trên chính đĩa cứng (bộ điều khiển) và thiết bị điều khiển đăng ký một thanh ghi điều khiển của chính đĩa cứng (bộ điều khiển).

Không liên quan đến HĐH (hoặc một số phần mềm khác) sẽ yêu cầu một số loại hoạt động DMA và phần văn bản bạn đang thảo luận trong phần câu hỏi này của bạn KHÔNG sử dụng DMA. Vì vậy, không, nó sẽ không xảy ra như thế trong trường hợp này.

Quý 2

Vì vậy, toàn bộ quan điểm của bộ điều khiển DMA là "thực hiện nhiệm vụ tẻ nhạt là lưu trữ nội dung từ bộ đệm bên trong của thiết bị vào bộ nhớ chính". CPU sẽ hoạt động với cả bộ điều khiển DMA và thiết bị đĩa. Nếu đĩa có thể tự làm điều này, sẽ không cần bộ điều khiển DMA.

Và thực tế, trong các hệ thống hiện đại, khả năng DMA thường được tích hợp vào chính bộ điều khiển đĩa cứng, theo nghĩa là bộ điều khiển có khả năng "làm chủ bus", nghĩa là bộ điều khiển chính bộ điều khiển DMA cho thiết bị. Tuy nhiên, xem chúng như hai thiết bị riêng biệt làm cho toàn bộ khái niệm về DMA trở nên ít khó hiểu hơn.

Quý 3 (loại)

Nếu bạn nghĩ về đĩa cứng là chồng gạch vừa được chuyển đến một trang web của tòa nhà, và bộ xử lý là thợ nề đặt các viên gạch để xây nhà. Bộ điều khiển DMA là công nhân mang gạch từ đống gạch đến nơi cần thiết cho thợ nề, nghĩa là thợ nề có thể tập trung làm công việc thực tế của việc đặt viên gạch (đó là công việc lành nghề, nếu bạn đã từng thử chính bạn), và công việc đơn giản là "lấy và mang" có thể được thực hiện bởi một công nhân kém kỹ năng.

Bằng chứng giai thoại: Khi tôi mới biết về việc chuyển DMA từ đĩa sang bộ nhớ là khoảng năm 1997 hoặc khi bộ điều khiển IDE bắt đầu sử dụng DMA và bạn cần phải có trình điều khiển "bộ điều khiển IDE bo mạch chủ" để cho phép IDE thực hiện DMA và tại thời điểm đó , việc đọc từ đĩa cứng sẽ chiếm khoảng 6-10% thời gian của CPU, trong đó DMA trong cùng một thiết lập sẽ sử dụng khoảng 1% thời gian của CPU. Trước thời điểm đó, chỉ những hệ thống ưa thích với bộ điều khiển đĩa SCSI mới sử dụng DMA.


5

Đây không phải là một câu trả lời; đó là một yêu cầu để làm rõ quá dài để phù hợp với các ý kiến.

Trước khi bất cứ ai có thể trả lời câu hỏi này, người ta phải giải thích rõ ràng kiến ​​trúc hệ thống máy tính đang được thảo luận. Cụ thể là:

  • Các hệ thống xe buýt liên quan đến mô tả này là gì?

    • Hầu hết các hệ thống máy tính có một bộ nhớ bus.
    • Hầu hết các máy tính có các loại hệ thống xe buýt khác.
  • Có phải đĩa IO cũng đi qua bus bộ nhớ không?

    • Nói cách khác, đĩa có sử dụng các đường bus địa chỉ cho các địa chỉ và các đường bus dữ liệu cho dữ liệu không?
  • Bộ điều khiển đĩa có thấy bus bộ nhớ là ...

    • Một chiếc xe buýt bộ nhớ? Đó là, nó nghĩ rằng nó đang nói chuyện với một con chip bộ nhớ; tức là RAS (nhấp vào hàng truy cập), CAS (nhấp vào truy cập cột), ...
    • Rất khó xảy ra - việc nói chuyện với chip bộ nhớ đòi hỏi người ta phải cực kỳ chính xác về việc ban hành các lệnh theo thời gian DRAM (độ trễ) - một vài chu kỳ xung nhịp quá sớm hoặc quá muộn, sẽ xảy ra mất dữ liệu.
  • Vậy ... bộ điều khiển đĩa nghĩ xe buýt "thực sự là gì"?

  • Trong hầu hết các hệ thống máy tính, có một loại IO được gọi là "Cổng I / O".

    • Cổng I / O có thể cõng lên xe buýt bộ nhớ hoặc họ có thể có một xe buýt chuyên dụng khác.
    • Điểm đặc biệt của Cổng I / O là người ta có thể hoàn thành mọi thứ trong một chu kỳ xe buýt (hoặc một số lượng không đổi được xác định trước) - không cần phải lo lắng về sự nguy hiểm của thời gian DRAM.
  • Trong các hệ thống tiên tiến hơn (tốt, từ hai thập kỷ trước), có các loại hệ thống xe buýt mới hơn. Ví dụ: ISA, PCI, AGP, PCMCIA ... SCSI, ATA, SAS, SATA, FC-AL ...


Bây giờ, với rất nhiều điều không chắc chắn được nêu ra về "hệ thống máy tính đang được thảo luận", bạn có thể hiểu tại sao bạn sẽ không nhận được câu trả lời rõ ràng cho câu hỏi của mình.

Vâng, tôi biết rằng nó đến từ một cuốn sách giáo khoa. Bạn có một bản sao. Tôi không. (Không phải ở nhà - tuy nhiên có một văn phòng.) Vì vậy, nếu bạn cần câu trả lời, bạn sẽ cần hiển thị một số sơ đồ và giải thích hệ thống xe buýt của máy tính của bạn trông như thế nào.


Ở dòng dưới cùng, mặc dù:

  • Một DMA là một thiết bị lập trình. Đó là, CPU có trách nhiệm cuối cùng là nói với DMA phải làm gì. Tất nhiên, trong khoảng thời gian mà DMA tiếp quản hệ thống, CPU sẽ hợp tác bằng cách để DMA chạy chương trình.

  • Dưới sự điều khiển của CPU (và HĐH chạy nó), DMA có khả năng chiếm quyền điều khiển cho một hoặc nhiều bus (số nhiều) để tạo điều kiện chuyển dữ liệu từ bộ điều khiển đĩa sang bộ nhớ chính.

  • Trong khung thời gian mà DMA tiếp quản bus (số nhiều), DMA sẽ đưa ra các lệnh trên bus đó - tức là thay cho bộ điều khiển thông thường của nó, tức là DMA giả vờ rằng nó đang làm việc của CPU.

  • Nếu việc truyền dữ liệu liên quan đến hai bus khác nhau, DMA có thể phải thực hiện việc này với các bus khác nhau.

  • Để có thể di chuyển một số byte (từ, v.v.), DMA chứa bộ đếm vòng lặp để theo dõi lượng dữ liệu còn lại sẽ được sao chép.

  • Để có thể ghi vào bộ nhớ chính, DMA chứa một thanh ghi địa chỉ bộ nhớ, được lập trình bởi CPU, để CPU có thể cho DMA biết nơi ghi dữ liệu.

  • Tùy thuộc vào thiết kế xe buýt của hệ thống, DMA có thể hoặc không phải đối phó với chi tiết khủng khiếp của chu kỳ thời gian DRAM.

  • Ngày xửa ngày xưa, một thời gian sau khi DMA được phát minh, một số thiết bị ngoại vi bắt đầu đóng gói DMA lên bộ điều khiển của chúng - đây được gọi là Bus Mastering . Tuy nhiên, cho dù DMA nằm trên gói CPU, bo mạch chủ hay thẻ I / O, thì cuối cùng nó vẫn phải nằm dưới sự kiểm soát (lập trình) của CPU, bởi vì chúng phải thương lượng bằng cách nào đó để truy cập vào bus hệ thống (số nhiều) và bộ nhớ chính.

  • Các hệ thống máy tính hiện đại có một hệ thống con chuyên dụng gọi là Bộ điều khiển DRAM. Nếu có một điều, gần như chắc chắn rằng Bộ điều khiển DRAM này cũng sẽ đáp ứng chức năng của DMA, nghĩa là nó giống như một "vòng lặp sao chép byte" có thể lập trình được và tất cả sự phức tạp đã nói ở trên được ẩn giấu bên trong silicon của DRAM Bộ điều khiển.


Nếu bạn thấy nó rất khó hiểu - tôi cũng thấy khó hiểu - bạn sẽ cần sơ đồ. Rất nhiều sơ đồ. Sơ đồ hệ thống. Sơ đồ xe buýt. Sơ đồ thời gian. Sơ đồ chuyển trạng thái. Vân vân.


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.